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))))