This program is an interpreter for arithmetic expressions using a simulated stack machine.
(defun topinterp (exp) ; interpret, pop result
(progn (interp exp)
(pop *stack*)))
(defun interp (exp)
(if (consp exp) ; if op
(if (eq (car exp) '+)
(progn (interp (cadr exp)) ; lhs
(interp (caddr exp)) ; rhs
(plus)) ; add
(if ...)) ; other ops
(pushopnd exp))) ; operand
(defun pushopnd (arg) (push arg *stack*))
(defun plus ()
(let ((rhs (pop *stack*)))
(pushopnd (+ (pop *stack*) rhs))))
> (topinterp '(+ (* 3 4) 5))
17
Contents    Page-10    Prev    Next    Page+10    Index