From 21a9f0aaa56d6dd767cefb30c606f4c62eecff48 Mon Sep 17 00:00:00 2001 From: Luke Lau Date: Tue, 23 Jul 2019 01:35:16 +0100 Subject: [PATCH] Add ast-traverse helper --- ast.scm | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/ast.scm b/ast.scm index 8dac3b6..c81bc2b 100644 --- a/ast.scm +++ b/ast.scm @@ -21,8 +21,15 @@ ((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) -- 2.30.2