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

17 lines
637 B
Common Lisp

(use-package :iterate)
(defun print-tree (tree value-function children-function)
(labels
((do-print-tree (tree prefix)
(format t "~a~%" (funcall value-function tree))
(iter
(with children = (funcall children-function tree))
(for child = (pop children))
(while child)
(if children
(progn (format t "~a├─ " prefix)
(do-print-tree child (format nil "~a│ " prefix)))
(progn (format t "~a└─ " prefix)
(do-print-tree child (format nil "~a " prefix)))))))
(do-print-tree tree "")))