Scheme 在球拍中重复字母表中的字母

Scheme 在球拍中重复字母表中的字母,scheme,racket,Scheme,Racket,我想写一个程序,将字母表中的字母作为符号进行迭代,并对它们进行处理。我希望它大致相当于这个C代码: for(char letter='a';letter假设您只想迭代小写英文字母,这里有一种方法: (define alphabet (string->list "abcdefghijklmnopqrstuvwxyz")) (for ([letter alphabet]) (displayln letter)) 不过,对于循环,您可以使用做更多的工作。例如 (for/list ([le

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


for(char letter='a';letter假设您只想迭代小写英文字母,这里有一种方法:

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

(for ([letter alphabet])
  (displayln letter))
不过,对于
循环,您可以使用
做更多的工作。例如

(for/list ([let alphabet] [r-let (reverse alphabet)])
  (list let r-let))
生成一个字母列表,并将其与另一个方向的字母配对。虽然这实际上更好地表示为映射:
(映射列表字母表(反向字母表))

此外,如果需要更多操作,还可以对字符集提供更多操作


编辑:最初,我用
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)))

Racket不支持C允许的字符和整数之间的隐式双关:与C不同,Racket值的类型是内在的,而不是值本身的外部类型。
char->integer
integer->char
函数在这些类型之间进行显式转换。

所以基本上你说的是没有明确定义整个字母表的方法是不可能的吗?球拍不是C++,所以字符和整数之间没有双关。如果你真的很想写,你可以写一个循环,它开始于(char ->整数→a)< /C> >结束于<代码>(char>整数αz)。不过,在拍子中没有这样的编程方法。注意,在C++中,如果你想迭代任何其他字符集,你也必须这样做。我原来的答案过于复杂。我更新它来使用<代码> String >列表< /C> >。你也可以直接在字符串上迭代,如<代码>()。[字母“abc…”)(显示字母))