program. 算术表达式解释器 interpret 的定义[lp-eval]

(define (lookup variable environment)
   ;; 不把未绑定的变量默认为零。
   (let ((entry (assq variable environment)))
     (if entry (cadr entry) (throw 'unbound-name variable))))

(define (interpret expression environment)
   (match expression
     ((? integer? n) n)
     ((? symbol? name) (lookup name environment))
     (('+ left right)
      (+ (interpret left environment) (interpret right environment)))
     (('* left right)
      (* (interpret left environment) (interpret right environment)))
     (_ (throw 'invalid-expression expression))))