Formatting a list

2019-07-19 08:51发布

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.

2条回答
来,给爷笑一个
2楼-- · 2019-07-19 09:06
* (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 ~^.

查看更多
劫难
3楼-- · 2019-07-19 09:28
* (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
查看更多
登录 后发表回答