(define-datatype AE AE? [num (n number?)] [binop (op procedure?) (lhs AE?) (rhs AE?)]) ;; calc : AE -> number ;; to define a calculator for AEs (define (calc an-ae) (cases AE an-ae [num (n) n] [binop (op l r) (op (calc l) (calc r))])) (calc (num 3)) "should equal" 3 (calc (binop + (num 3) (num 4))) "should equal" 7 (calc (binop + (binop + (num 3) (num 4)) (num 7))) "should equal" 14 (calc (binop * (binop - (num 1) (num 3)) (binop / (num 4) (num 2)))) "should equal" -4