2010-12-05 4 views
2

je la liste suivante: (X X O NIL NIL O NIL NIL O)Mise en forme d'une liste

J'aimerais le formater pour ressembler à ceci:

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

Je pourrais probablement bricoler quelque chose avec ce peu que je sais à propos de Lisp et FORMAT, mais ce serait probablement assez grossier. Tout pointeur serait grandement apprécié.

+3

Faites-le. Inquiétude à propos de la fixation de la grossièreté une fois que vous avez une version qui fonctionne. –

Répondre

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 

Une petite explication sur la chaîne de format dans ce qui précède. Crucial ici sont les '~ {' '~}' et '~ ^'. Une paire d'accolades Tilde assorties prend une liste comme argument d'entrée et itère dessus. Le ~ ~ contrôle un échappement anticipé de cette boucle, si la liste itérée est vide. Documentation pertinente ~{ et ~^.