RosettaCodeData/Task/Visualize-a-tree/Common-Lisp/visualize-a-tree-1.lisp

33 lines
1.1 KiB
Common Lisp

(defun visualize (tree)
(labels
((rprint (list)
(mapc #'princ (reverse list)))
(vis-h (tree branches)
(let ((len (length tree)))
(loop
for item in tree
for idx from 1 to len do
(cond
((listp item)
(rprint (cdr branches))
(princ "+---+")
(let ((next (cons "| "
(if (= idx len)
(cons " " (cdr branches))
branches))))
(terpri)
(rprint (if (null item)
(cdr next)
next))
(terpri)
(vis-h item next)))
(t
(rprint (cdr branches))
(princ item)
(terpri)
(rprint (if (= idx len)
(cdr branches)
branches))
(terpri)))))))
(vis-h tree '("| "))))