2012-04-29 18 views
3

アルファベットの文字を繰り返して、記号で何かをするプログラムを書いてみたいと思います。私はそれがこのCコードとおおよそ同等であることを望みます:ラケットのアルファベットの文字を繰り返してください

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

私は本当にラケットでこれを行う方法がありません。ご協力いただきありがとうございます。あなたが唯一の小文字の英語のアルファベットの文字を反復処理したいと仮定すると、

答えて

9

は、ここでそれを行うための一つの方法です:

(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->integerinteger->char、およびrangeで何かをしましたが、今はもっと簡単です。

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

ラケットは、Cが許可文字と整数の間の暗黙的なpunningをサポートしていません:Cとは異なり、ラケット値の型は、固有のものである答えの一つが、直訳のアプローチを示してちょうどそのよう

+1

基本的に、アルファベット全体を明示的に定義しなくてもそれを行う方法はないということです。 – Daniel

+1

ラケットはC++ではないので、文字と整数の間には罰せられません。本当に本当にしたいのなら、 '(char-> integer#\ a)'で始まり '(char-> integer#\ z)'で終わるループを書くことができますが、そのようにプログラムする良い理由はありませんラケット。 C++では、他の文字セットに対して反復処理を行いたい場合は、そのようなことをしなければならないことに注意してください。 –

+0

どうもありがとう! – Daniel

7

値そのものの外部ではなく、 char->integerおよびinteger->char関数は、これらの型間の明示的な変換を行います。

関連する問題