2010-12-05 146 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花括號將列表作爲輸入參數並對其進行迭代。如果迭代的列表是空的,那麼〜^控制從此循環的提前轉義。 相關文檔~{~^