【发布时间】:2013-07-30 19:43:05
【问题描述】:
Common Lisp 支持大量的格式化指令。但是,我找不到一个方便的指令来解决我的问题。基本上,我想打印一个数字网格。
使用列表可以很好地工作:
(format t "~{~A|~A|~A~%~^-----~%~}" '(1 2 3 4 5 6 7 8 9))
1|2|3
-----
4|5|6
-----
7|8|9
NIL
我找不到类似的结构来迭代向量。 CLtL2 states clearly that ~{...~} 需要一个列表作为参数。无论如何,我尝试使用向量,但我的 Clisp 正确地惊呼了错误的参数类型。作为一种解决方法,我使用全能的loop 将我的向量转换为一次性列表。
(let ((lst (loop for e across '#(1 2 3 4 5 6 7 8 9) collecting e)))
(format t "~{~A|~A|~A~%~^-----~%~}" lst))
1|2|3
-----
4|5|6
-----
7|8|9
NIL
这行得通,但我觉得它是一个笨拙的临时解决方案。我宁愿不要只为format 创建大量临时列表。有没有办法直接迭代向量?
出于好奇,format 是否有理由不支持序列?
【问题讨论】:
-
您可以随时添加自己的
(format t "~/func-name/" something)
标签: format common-lisp