17 ('closure 'closure) ; only available in codegen
19 ((builtin? x) 'builtin)
21 ((integer? x) 'int-literal)
22 ((boolean? x) 'bool-literal)))
24 (define (ast-traverse f x)
26 ('let `(let ,(map (lambda (x) (list (car x) (f (cadr x))))
28 ,@(map f (let-body e))))
30 ('lambda `(lambda ,(lambda-args x) ,(f lambda-body)))
31 ('if `(if ,@(map f (cdr x))))
34 (define let-bindings cadr)
35 (define let-body cddr)
38 (and (list? x) (eq? (car x) 'lambda)))
40 ; for use in normalized form
41 (define lambda-arg caadr)
43 (define lambda-args cadr)
44 (define lambda-body caddr)