2012-04-29 27 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->charrange,但我現在更簡單。

+1

所以基本上你說的是,沒有明確定義整個字母表就沒有辦法做到這一點? – Daniel

+1

球拍不是C++,因此不會在字符與整數之間打字。如果你確實想要,你可以編寫一個從'(char-> integer#\ a)'開始並以'(char-> integer#\ z)'結尾的循環'但是沒有理由這樣編程球拍。請注意,在C++中,如果你想迭代任何其他字符集,你也必須這樣做。 –

+0

明白了。非常感謝! – Daniel

7

只是讓其中一個答案顯示了直譯的方法:

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

球拍不支持字符和整數是c證之間的隱雙關語:不像在C,球拍值的類型是內在的而不是價值本身的外部。 char->integerinteger->char函數執行這些類型之間的顯式轉換。