rendered paste body;;a7q4
;;
;;
;;
(define (compile expr)
(local
[(define (eval expr x-val)
(cond
[(cons? (first expr)) (eval (first expr) x-val)]
[(number? (first expr)) (first expr)]
[(symbol=? (first expr) 'x) x-val]
[(symbol=? (first expr) '*)
(local ((define (x expr)
(cond
[(empty? expr) 1]
[(or (symbol? (first expr))
(cons? (first expr)))
(* (eval expr x-val) (x (rest expr)))]
[else (* (first expr) (x (rest expr)))])))
(x (rest expr)))]
[(symbol=? (first expr) '/)
(local ((define (x expr)
(cond
[(empty? expr) 1]
[(or (symbol? (first expr))
(cons? (first expr)))
(/ (eval expr x-val) (x (rest expr)))]
[else (/ (first expr) (x (rest expr)))])))
(x (rest expr)))]
[(symbol=? (first expr) '+)
(local ((define (x expr)
(cond
[(empty? expr) 0]
[(or (symbol? (first expr))
(cons? (first expr)))
(+ (eval expr x-val) (x (rest expr)))]
[else (+ (first expr) (x (rest expr)))])))
(x (rest expr)))]
[(symbol=? (first expr) '-)
(local ((define (x expr)
(cond
[(empty? expr) 0]
[(or (symbol? (first expr))
(cons? (first expr)))
(- (eval expr x-val) (x (rest expr)))]
[else (- (first expr) (x (rest expr)))])))
(x (rest expr)))]
[(symbol=? (first expr) 'pow)
(local ((define (x expr)
(cond
[(empty? expr) 1]
[(or (symbol? (first expr))
(cons? (first expr)))
(expt (eval expr x-val) (x (rest expr)))]
[else (expt (first expr) (x (rest expr)))])))
(x (rest expr)))]))]
(lambda (x) (eval expr x))))
(compile '(+ 1 x))