Evaluate BODY with NAME bound to every element in TREE. Return RET-VAL.
(defmacro dotree ((name tree &optional ret-val) &body body)
"Evaluate BODY with NAME bound to every element in TREE. Return RET-VAL."
(with-unique-names (traverser list list-element)
`(progn
(labels ((,traverser (,list)
(dolist (,list-element ,list)
(if (consp ,list-element)
(,traverser ,list-element)
(let ((,name ,list-element))
,@body)))))
(,traverser ,tree)
,ret-val))))Source Context