2010-12-05 3 views
2

У меня есть следующий список: (X X O NIL NIL O NIL NIL O)Форматирование списка

я хотел бы, чтобы отформатировать его, чтобы выглядеть следующим образом:

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

Я мог бы, вероятно, булыжник что-то вместе с тем, что мало я знаю о Лиспе и FORMAT, но, вероятно, это будет довольно грубо. Любые указатели будут очень благодарны.

+3

Просто сделайте это. Беспокойство об устранении грубости, если у вас есть версия, которая работает. –

ответ

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 

Небольшое пояснение о форматной строки в выше. Речь здесь идет о '~ {' '~}' и '~ ^'. Пара подходящих фигур Тильды принимает список как входной аргумент и перебирает его. Элемент ~^управляет ранним выходом из этого цикла, если переименованный список пуст. Соответствующая документация ~{ и ~^.

Смежные вопросы