projects
/
scheme.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
31e29e5
)
Add ast-traverse helper
author
Luke Lau
<luke_lau@icloud.com>
Tue, 23 Jul 2019 00:35:16 +0000
(
01:35
+0100)
committer
Luke Lau
<luke_lau@icloud.com>
Tue, 23 Jul 2019 00:35:16 +0000
(
01:35
+0100)
ast.scm
patch
|
blob
|
history
diff --git
a/ast.scm
b/ast.scm
index 8dac3b68833ca430d27015b8a97263a72c531f37..c81bc2b38ef4a9bbd70590f83d49dddd2b87948b 100644
(file)
--- a/
ast.scm
+++ b/
ast.scm
@@
-21,8
+21,15
@@
((integer? x) 'int-literal)
((boolean? x) 'bool-literal)))
((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)
(define let-bindings cadr)
(define let-body cddr)