Converting a Tree to RPN
(defun tree-to-polish (exp)
(nreverse (tree-to-p exp nil)))
(defun tree-to-p (exp result)
(if (atom exp) ; if leaf
(cons exp result) ; push
(progn
(mapc #'(lambda (opnd) ; operands
(setq result
(tree-to-p opnd
result)))
(rest exp))
(cons (first exp) result)))) ; add op
(tree-to-polish '(+ (* a b) c)) = (A B * C +)
(setq testx '(/ (+ (minus b)
(sqrt (- (expt b 2)
(* 4 (* a c)))))
(* 2 a)))
(tree-to-polish testx)
= (B MINUS B 2 EXPT 4 A C * * - SQRT + 2 A * /)