格式化列表

时间:2010-12-05 20:42:47

标签: lisp format common-lisp

我有以下列表:(X X O NIL NIL O NIL NIL O)

我想将其格式化为:

X | X | O
--+---+--
  |   | O
--+---+--
  |   | O

我可能用我对Lisp和FORMAT所知甚少的东西拼凑起来,但它可能会非常糟糕。任何指针都将非常感激。

2 个答案:

答案 0 :(得分:6)

* (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

答案 1 :(得分:1)

* (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

关于上面格式字符串的一点解释。这里至关重要的是'〜{''〜}'和'〜^'。一对匹配的Tilde大括号将列表作为输入参数并迭代它。如果迭代的列表为空,则〜^控制从此循环的早期转义。 相关文档~{~^