(define-datatype primitive primitive? (add-prim) (subtract-prim) (mult-prim) (incr-prim) (decr-prim)) (define-datatype expression expression? (lit-exp (datum number?)) (var-exp (id symbol?)) (primapp-exp (rator primitive?) (rands (list-of expression?))) (if-exp (test-exp expression?) (then-exp expression?) (else-exp expression?)) (let-exp (ids (list-of symbol?)) (rands (list-of expression?)) (body expression?)))