Add ast-traverse helper
authorLuke Lau <luke_lau@icloud.com>
Tue, 23 Jul 2019 00:35:16 +0000 (01:35 +0100)
committerLuke Lau <luke_lau@icloud.com>
Tue, 23 Jul 2019 00:35:16 +0000 (01:35 +0100)
ast.scm

diff --git a/ast.scm b/ast.scm
index 8dac3b68833ca430d27015b8a97263a72c531f37..c81bc2b38ef4a9bbd70590f83d49dddd2b87948b 100644 (file)
--- a/ast.scm
+++ b/ast.scm
    ((integer? x) 'int-literal)
    ((boolean? x) 'bool-literal)))
 
-;; (define (ast-recurse f x)
-;;   (cond (
+(define (ast-traverse f x)
+  (case (ast-type x)
+    ('let `(let ,(map (lambda (x) (list (car x) (f (cadr x))))
+                     (let-bindings x))
+            ,@(map f (let-body e))))
+    ('app (map f x))
+    ('lambda `(lambda ,(lambda-args x) ,(f lambda-body)))
+    ('if `(if ,@(map f (cdr x))))
+    (else x)))
 
 (define let-bindings cadr)
 (define let-body cddr)