(require (lib "trace.ss" "mzlib")) (define (eval xval code) (cond [(number? code) code] [(symbol? code) xval] [(cons? code) (cond [(symbol=? (first code) '+) (+ (eval xval (second code)) (eval xval (third code)))] [(symbol=? (first code) '-) (- (eval xval (second code)) (eval xval (third code)))] [(symbol=? (first code) '*) (* (eval xval (second code)) (eval xval (third code)))] [(symbol=? (first code) '/) (/ (eval xval (second code)) (eval xval (third code)))] ) ] [else "Idiot programmer passed illegal code: must be number, symbol, or list."] ) ) (trace eval) (eval '(+ 1 (* (+ 2 3) x)) 4)