4

アルファベットの文字を記号として繰り返し、それを使って何かをするプログラムを書きたいです。このCコードとほぼ同等にしたいと思います。

for(char letter = 'a'; letter <= 'z'; letter++)
{
    printf("The letter is %c\n", letter);
}

ラケットでこれを行う方法が本当にわかりません。ご協力いただきありがとうございます。

4

2 に答える 2

9

小文字の英語のアルファベットだけを繰り返し処理したい場合は、次の1つの方法があります。

(define alphabet (string->list "abcdefghijklmnopqrstuvwxyz"))

(for ([letter alphabet])
  (displayln letter))

forただし、ループを使用するとさらに多くのことができます。例えば、

(for/list ([let alphabet] [r-let (reverse alphabet)])
  (list let r-let))

反対方向に進む文字とペアになっている文字のリストを生成します。それは実際には地図としてよりよく表現されていますが:(map list alphabet (reverse alphabet))

また、SRFI-14は、さらに必要な場合に、文字のセットに対してより多くの操作を提供します。

編集:元々、私は、、で何かをしましchar->integerたがinteger->charrange今持っているものはもっと簡単です。

于 2012-04-29T22:12:44.000 に答える
8

答えの1つが直訳アプローチを示すように:

#lang racket
(for ([letter (in-range (char->integer #\a)
                        (add1 (char->integer #\z)))])
  (printf "The letter is ~a\n" (integer->char letter)))

Racketは、Cが許可する文字と整数の間の暗黙のしゃれをサポートしていません。Cとは異なり、Racket値の型は、値自体の外部ではなく固有です。char->integerandinteger->char関数は、これらのタイプ間の明示的な変換を行います。

于 2012-04-30T16:33:01.697 に答える