All pastes #909874 Raw Edit

Unnamed

public text v1 · immutable
·published 2008-02-19 16:14 UTC
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))