18 ('closure 'closure) ; only available in codegen
19 ('static-string 'static-string) ; only available in codegen
21 ((builtin? x) 'builtin)
23 ((integer? x) 'int-literal)
24 ((boolean? x) 'bool-literal)
25 ((string? x) 'string-literal)))
27 (define (ast-traverse f x)
29 ('let `(let ,(map (lambda (x) (list (car x) (f (cadr x))))
31 ,@(map f (let-body x))))
33 ('lambda `(lambda ,(lambda-args x) ,(f (lambda-body x))))
34 ('if `(if ,@(map f (cdr x))))
37 (define let-bindings cadr)
38 (define let-body cddr)
41 (and (list? x) (eq? (car x) 'lambda)))
43 ; for use in normalized form
44 (define lambda-arg caadr)
46 (define lambda-args cadr)
47 (define lambda-body caddr)