2012-04-29 48 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函数执行这些类型之间的显式转换。