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