(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))