首页 > 解决方案 > 如何从字符列表中输出字符网格?

问题描述

我有一个要打印为固定列网格的字符列表。对于每一个line-width我想打印到换行符。

例如,我想要

(#\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

这是我尝试过的:

(define (char-display char-list line-width)
  (for ([char (in-list char-list)]
        [i (in-range line-width)])
    (cond
      [(zero? i) (void)] ; to make sure modulo does not operate on zero
      [(zero? (modulo line-width i)) (display #\newline)]
      [else (display char)])))

在使用上面的列表和线宽 9 调用函数时,我得到:


J
(tnm@[

我究竟做错了什么?有一个更好的方法吗?

标签: schemeracket

解决方案


其他人已经提供了很好的答案。我只想指出in-slice,这在这种情况下会有所帮助。

(define (char-display char-list line-width)
  (for ([chars (in-slice line-width char-list)])
    (map display chars)
    (newline)))

推荐阅读