rendered paste body(define-datatype expr expr?
(var-exp (id symbol?))
(lambda-exp (ids (list-of symbol?)) (body expr?))
(app-exp (rater expr?) (rand (list-of expr?)))
(literal-exp (value number?))
(prim-app (prim primitive?) (list-of expr?))
)
(define-datatype primitive primitive?
(add-prim)
(multiply-prim)
)
(define (parse x)
(cond ((number? x) (literal-exp x))
((symbol? x) (var-exp x))
((and (pair? x) (eq? (car x) `lambda)) (lambda-exp (cadr x) (parse (caddr x))))
;; ERROR HERE
;; prim-app: bad value for list-of field: (#(struct:var-exp x) #(struct:var-exp y))
((and (pair? x) (memv (car x) `(+ *))) (prim-app (parse-prim (car x)) (map parse (cdr x))))
;; / ERROR HERE
(else (app-exp (parse (car x)) (map parse (cdr x))))
)
)
(parse `(+ (* 1 2) 3))