Improved let macro hygiene.
authorTim Vaughan <tgvaughan@gmail.com>
Fri, 28 Apr 2017 11:08:54 +0000 (23:08 +1200)
committerTim Vaughan <tgvaughan@gmail.com>
Fri, 28 Apr 2017 11:10:41 +0000 (23:10 +1200)
README.md
src/scheme-library.scm

index 974db98..2f78b7e 100644 (file)
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@ Scheme](https://github.com/petermichaux/bootstrap-scheme) (as described in
 [this wonderful series of blog
 posts](http://peter.michaux.ca/articles/scheme-from-scratch-introduction)) from
 C to forth, but also includes variadic compound function support, mark-sweep
-garbage collection, quasiquotation, and a very basic (non-hygenic) macro
+garbage collection, quasiquotation, and a basic (non-hygienic) macro
 system.
 
 In future, I plan to also implement a more complete numerical tower to bring it closer to
index fb76f3a..73e8a4e 100644 (file)
 
 ; let
 
-(define (let-vars args)
-  (if (null? args)
-    '()
-    (cons (caar args) (let-vars (cdr args)))))
-
-(define (let-inits args)
-  (if (null? args)
-    '()
-  (cons (cadar args) (let-inits (cdr args)))))
-
 (define-macro (let args . body)
-              `((lambda ,(let-vars args)
-                 ,@body) ,@(let-inits args)))
+              `((lambda ,(map (lambda (x) (car x)) args)
+                 ,@body) ,@(map (lambda (x) (cadr x)) args)))
 
 ; while