我想编写一个程序,它可以遍历字母表中的字母作为符号并与它们进行一些操作。我想它大致相当于这个C代码:在球拍中迭代字母表中的字母
for(char letter = 'a'; letter <= 'z'; letter++)
{
printf("The letter is %c\n", letter);
}
我真的不知道如何在球拍中做到这一点。谢谢你的帮助。
我想编写一个程序,它可以遍历字母表中的字母作为符号并与它们进行一些操作。我想它大致相当于这个C代码:在球拍中迭代字母表中的字母
for(char letter = 'a'; letter <= 'z'; letter++)
{
printf("The letter is %c\n", letter);
}
我真的不知道如何在球拍中做到这一点。谢谢你的帮助。
假设你只想遍历小写英文字母,下面是做这件事:
(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
,但我现在更简单。
只是让其中一个答案显示了直译的方法:
#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->integer
和integer->char
函数执行这些类型之间的显式转换。
所以基本上你说的是,没有明确定义整个字母表就没有办法做到这一点? – Daniel
球拍不是C++,因此不会在字符与整数之间打字。如果你确实想要,你可以编写一个从'(char-> integer#\ a)'开始并以'(char-> integer#\ z)'结尾的循环'但是没有理由这样编程球拍。请注意,在C++中,如果你想迭代任何其他字符集,你也必须这样做。 –
明白了。非常感谢! – Daniel