I have the following list: (X X O NIL NIL O NIL NIL O)
I'd like to format it to look like this:
X | X | O
--+---+--
| | O
--+---+--
| | O
I could probably cobble something together with what little I know about Lisp and FORMAT
, but it would probably be pretty gross. Any pointers would be greatly appreciated.
* (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
A little explanation about the format string in the above. Crucial here are the '~{' '~}' and '~^'. A pair of matching Tilde braces take a list as input argument and iterate over it. The ~^ controls an early escape from this loop, if the list being iterated over is empty.
Relevant documentation ~{ and ~^.