Scheme 如何从字符列表中输出字符网格?
我有一个字符列表,我想打印出来作为固定列的网格。对于每个Scheme 如何从字符列表中输出字符网格?,scheme,racket,Scheme,Racket,我有一个字符列表,我想打印出来作为固定列的网格。对于每个行宽度,我要打印到换行符 例如,我想要 (#\Y #\q #\J #\u #\( #\t #\n #\m #\@ #\& #\c #\z #\x #\? #\} #\_ #\0 #\@ #\q #\r #\f #\/ #\I #\1 #\; #\B #\& #\O #\O #\O #\Y #\( #\n #\i #\0 #\B #\L #\h #\* #\# #\1 #\r #\? #\k #\& #\J #\J #
行宽度
,我要打印到换行符
例如,我想要
(#\Y #\q #\J #\u #\( #\t #\n #\m #\@ #\& #\c #\z #\x #\? #\} #\_ #\0 #\@ #\q #\r #\f #\/ #\I #\1 #\; #\B #\& #\O #\O #\O #\Y #\( #\n #\i #\0 #\B #\L #\h #\* #\# #\1 #\r #\? #\k #\& #\J #\J #\x #\# #\x #\i #\d #\Q #\o #\J #\J #\O #\o #\n #\_ #\v #\t #\r #\X #\c #\J #\X #\t #\z #\( #\) #\b #\C #\f #\x #\z #\d #\f #\Q #\t #\w)
显示为:
YqJu(tnm@
&czx?}_0@
qrf/I1;B&
OOOY(ni0B
Lh*#1r?k&
JJx#xidQo
JJOon_vtr
XcJXtz()b
CfxzdfQtw
这就是我尝试过的:
(定义(字符显示字符列表线宽)
(用于([字符(列表中字符列表)]
[i(范围内线宽)])
(续)
[(零?i)(无效)];确保模不在零上运行
[(零?(模线宽i))(显示#\newline)]
[其他(显示字符)])
使用上述列表和9的线宽调用函数时,我得到:
J
(tnm@[
我做错了什么?
有更好的方法吗?在
(define (char-display char-list line-width)
(for ([char (in-list char-list)]
[i (in-range line-width)])
...))
char
和i
分别通过char list
和数字0、1、…、线宽-1
。它们是并行的。当一个序列耗尽时,循环停止。
这里的数字序列最短,您只能看到一行
因此,第一个变更是将第二个for条款变更为
[i (in-naturals)]
第二个变化是模的参数顺序(它们需要交换):
第三个变化是始终显示一个字符。只有换行符可以显示,也可以不显示
(define (char-display char-list line-width)
(for ([char (in-list char-list)]
[i (in-naturals)])
(when (zero? (modulo i line-width))
(unless (zero? i)
(newline)))
(display char)))
这项工作:
(define (char-display char-list line-width)
(for ([char (in-list char-list)]
[i (in-naturals 1)])
(display char)
(when (zero? (modulo i line-width))
(newline))))
您的代码有几个问题:
- 执行
只会生成小于等于(范围内的线宽)
线宽的整数,您需要生成与列表中字符数量相同的整数
- 我们可以在
处开始整数序列,以避免在开始时处理零的边情况1
- 模的参数顺序错误
- 您必须在所有迭代中显示字符,当模为零时,您跳过了一些字符
- 其他人已经给出了很好的答案。我只想指出slice中的
,这在这种情况下可能会很有帮助
(定义(字符显示字符列表线宽)
(用于([字符(在片线宽度字符列表中)])
(地图显示字符)
(新行)))
btw,您可以使用for each代替map,因为结果会被丢弃。这是一个很好的答案!我也花了一段时间才发现片中的是racket/sequence
的一部分,而不是racket/base
(define (char-display char-list line-width)
(for ([char (in-list char-list)]
[i (in-naturals 1)])
(display char)
(when (zero? (modulo i line-width))
(newline))))