What is an interpreter, compiler?
;; interpreter : exp -> value
;; compiler : exp[scheme] -> exp[low-level language]
If we also add lists of definitions, we need
;; interpreter : exp list-of-defs -> value
Implement the Scheme evaluator
Add cond0 to the interpreted expression language:
exp =
(cond0
(exp exp)
(else exp))
(cond0 (0 exp1) (else exp2)) = exp1
(cond0 (n exp1) (else exp2)) = exp2 if n is not 0