树的遍历
(defvar *saved* nil)
(=defun re-start ()
(if *saved*
(funcall (pop *saved*))
(=values 'done)))
(=defun dft-node (tree)
(cond ((null tree) (re-start))
((atom tree) (=values tree))
(t (push #'(lambda () (dft-node (cdr tree))) *saved*)
(dft-node (car tree)))))
(=defun dft2 (tree)
(setq *saved* nil)
(=bind (node) (dft-node tree)
(cond ((eq node 'done) (=values nil))
(t (princ node)
(re-start)))))
执行结果如下