Add recursive let-bindings
[scheme.git] / ast.scm
1 (define (app? x)
2   (and (list? x)
3        (>= (length x) 2)
4        (not (eq? (car x) 'let))
5        (not (eq? (car x) 'lambda))))
6
7 (define (let? x)
8   (and (list? x) (eq? (car x) 'let)))
9
10 (define let-bindings cadr)
11 (define let-body cddr)
12
13 (define (lambda? x)
14   (and (list? x) (eq? (car x) 'lambda)))
15
16 ; for use in normalized form
17 (define lambda-arg caadr)
18 ; for use elsewhere
19 (define lambda-args cadr)
20 (define lambda-body caddr)
21
22 (define (var? x)
23   (and (not (list? x)) (symbol? x)))
24
25 (define (builtin? x)
26   (case x
27     ('+ #t)
28     ('- #t)
29     ('* #t)
30     ('! #t)
31     ('bool->int #t)
32     (else #f)))