我想编写一个程序,将字母表中的字母作为符号进行迭代,然后对它们进行处理。我希望它大致相当于这个C代码:
for(char letter = 'a'; letter <= 'z'; letter++)
{
printf("The letter is %c\n", letter);
}
我真的不知道如何在Racket中这样做。谢谢你的帮助。
答案 0 :(得分: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->integer
,integer->char
和range
做了一些事情,但我现在拥有的更简单。
答案 1 :(得分:7)
这样,其中一个答案显示了字面翻译方法:
#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->integer
和integer->char
函数在这些类型之间进行显式转换。