Partial Evaluation: Interpreter

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