Add let bindings
[scheme.git] / ast.scm
diff --git a/ast.scm b/ast.scm
new file mode 100644 (file)
index 0000000..19dc7a0
--- /dev/null
+++ b/ast.scm
@@ -0,0 +1,20 @@
+(define (app? x)
+  (and (list? x)
+       (>= (length x) 2)
+       (not (eq? (car x) 'let))
+       (not (eq? (car x) 'lambda))))
+
+(define (let? x)
+  (and (list? x) (eq? (car x) 'let)))
+
+(define let-bindings cadr)
+(define let-body cddr)
+
+(define (lambda? x)
+  (and (list? x) (eq? (car x) 'lambda)))
+
+(define lambda-arg cadr)
+(define lambda-body cddr)
+
+(define (var? x)
+  (and (not (list? x)) (symbol? x)))