Lisp 格式化列表

Lisp 格式化列表,lisp,format,common-lisp,Lisp,Format,Common Lisp,我有以下列表:(xxo零零零零零零) 我想将其格式化为如下所示: X | X | O --+---+-- | | O --+---+-- | | O 我可能会把我对Lisp和格式所知甚少的东西拼凑在一起,但这可能会非常糟糕。任何指点都将不胜感激 * (format t "~{~A | ~A | ~A~%~^--+---+--~%~}" (mapcar (lambda (x) (or x " ")) '(X O X NIL X X O X NIL))) X | O | X

我有以下列表:
(xxo零零零零零零)

我想将其格式化为如下所示:

X | X | O
--+---+--
  |   | O
--+---+--
  |   | O
我可能会把我对Lisp和
格式所知甚少的东西拼凑在一起,但这可能会非常糟糕。任何指点都将不胜感激

* (format t "~{~A | ~A | ~A~%~^--+---+--~%~}"
    (mapcar (lambda (x) (or x " ")) '(X O X NIL X X O X NIL)))
X | O | X
--+---+--
  | X | X
--+---+--
O | X |
NIL
关于上面的格式字符串的一点解释。这里最重要的是“~{”~}”和“~^”。一对匹配的大括号将一个列表作为输入参数并在其上迭代。如果正在迭代的列表为空,则~^控制从此循环的早期转义。
相关文档和文件。

就这样做吧。一旦你有了一个有效的版本,就要担心如何修正粗俗。
* (format t "~{~A | ~A | ~A~%~^--+---+--~%~}"
    (mapcar (lambda (x) (or x " ")) '(X O X NIL X X O X NIL)))
X | O | X
--+---+--
  | X | X
--+---+--
O | X |
NIL