(define-record-type lit (fields datum)) (define-record-type varref (fields var)) (define-record-type app (fields rator rands)) (define parse (lambda (datum) (cond ((number? datum) (make-lit datum)) ((symbol? datum) (make-varref datum)) ((pair? datum) (make-app (parse (car datum)) (map parse (cdr datum)))) (else (error 'parse "Invalid concrete syntax " datum)))))