通过Racket中的字母表中的字母进行迭代

Dan*_*iel 3 scheme racket

我想写一个程序,它迭代字母表中的字母作为符号,并用它们做一些事情.我希望它大致相当于这个C代码:

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

我真的不知道如何在Racket中这样做.谢谢你的帮助.

Asu*_*awa 9

假设您只想迭代小写英文字母,这是一种方法:

(define alphabet (string->list "abcdefghijklmnopqrstuvwxyz"))

(for ([letter alphabet])
  (displayln letter))
Run Code Online (Sandbox Code Playgroud)

你可以用for循环做更多的事情.例如,

(for/list ([let alphabet] [r-let (reverse alphabet)])
  (list let r-let))
Run Code Online (Sandbox Code Playgroud)

生成一个字母列表,与另一个方向的字母配对.虽然这实际上更好地表达为地图:(map list alphabet (reverse alphabet)).

此外,如果您需要更多字符,SRFI-14可以对字符集提供更多操作.

编辑:原来,我做了一件带char->integer,integer->char以及range但是我现在有更简单.


dyo*_*yoo 7

只是这样,其中一个答案显示了字面翻译方法:

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

Racket不支持C允许的字符和整数之间的隐式惩罚:与C不同,Racket值的类型是内在的而不是值本身的外部.该char->integerinteger->char功能做那些类型之间的明确的翻译.