Форматирование списка - PullRequest
       45

Форматирование списка

2 голосов
/ 05 декабря 2010

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

Я бы хотел отформатировать его так:

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

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

Ответы [ 2 ]

6 голосов
/ 06 декабря 2010
* (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 голос
/ 06 декабря 2010
* (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

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

...