From: Luke Lau Date: Tue, 23 Jul 2019 00:35:16 +0000 (+0100) Subject: Add ast-traverse helper X-Git-Url: https://git.lukelau.me/?p=scheme.git;a=commitdiff_plain;h=21a9f0aaa56d6dd767cefb30c606f4c62eecff48 Add ast-traverse helper --- 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)