2010-12-05 90 views
2

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

我想格式化它看起来像这样:

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

我大概可以拼凑一些什么小我知道Lisp和在一起FORMAT,但它可能会相当严重。任何指针将不胜感激。

+3

只要做到这一点。一旦你有一个版本的工作,担心修复粗糙。 – 2010-12-05 21:30:05

回答

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
* (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花括号将列表作为输入参数并对其进行迭代。如果迭代的列表是空的,那么〜^控制从此循环的提前转义。 相关文档~{~^