4

我想编写一个程序,将字母表中的字母作为符号进行迭代并对其进行处理。我希望它大致相当于这个 C 代码:

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

我真的不知道如何在 Racket 中做到这一点。谢谢你的帮助。

4

2 回答 2

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我现在拥有的更简单。

于 2012-04-29T22:12:44.000 回答
8

只是为了让其中一个答案显示直译方法:

#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->integerandinteger->char函数在这些类型之间进行显式转换。

于 2012-04-30T16:33:01.697 回答