(car xs)
(last (cdr xs))))
-
(define (normalize prog) ; (+ a b) -> ((+ a) b)
(case (ast-type prog)
('lambda
`(,(normalize (car prog)) ,(normalize (cadr prog))) ; (f a)
`(,(list (normalize (car prog)) (normalize (cadr prog)))
,(normalize (caddr prog))))) ; (f a b)
- ;; (list (list (normalize (car prog))
- ;; (normalize (cadr prog))) (normalize (caddr prog))))) ; (f a b)
('let
(append (list 'let
(map (lambda (x) `(,(car x) ,(normalize (cadr x))))
(let-bindings prog)))
(map normalize (let-body prog))))
- ('if `(if ,(normalize (cadr prog))
- ,(normalize (caddr prog))
- ,(normalize (cadddr prog))))
- (else prog)))
+ (else (ast-traverse normalize prog))))
(define (builtin-type x)
(case x