我想編寫一個程序,它可以遍歷字母表中的字母作爲符號並與它們進行一些操作。我想它大致相當於這個C代碼:在球拍中迭代字母表中的字母
for(char letter = 'a'; letter <= 'z'; letter++)
{
printf("The letter is %c\n", letter);
}
我真的不知道如何在球拍中做到這一點。謝謝你的幫助。
我想編寫一個程序,它可以遍歷字母表中的字母作爲符號並與它們進行一些操作。我想它大致相當於這個C代碼:在球拍中迭代字母表中的字母
for(char letter = 'a'; letter <= 'z'; letter++)
{
printf("The letter is %c\n", letter);
}
我真的不知道如何在球拍中做到這一點。謝謝你的幫助。
假設你只想遍歷小寫英文字母,下面是做這件事:
(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->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證之間的隱雙關語:不像在C,球拍值的類型是內在的而不是價值本身的外部。 char->integer
和integer->char
函數執行這些類型之間的顯式轉換。
所以基本上你說的是,沒有明確定義整個字母表就沒有辦法做到這一點? – Daniel
球拍不是C++,因此不會在字符與整數之間打字。如果你確實想要,你可以編寫一個從'(char-> integer#\ a)'開始並以'(char-> integer#\ z)'結尾的循環'但是沒有理由這樣編程球拍。請注意,在C++中,如果你想迭代任何其他字符集,你也必須這樣做。 –
明白了。非常感謝! – Daniel