aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--module/util.scm5
-rw-r--r--tests/let.scm4
2 files changed, 9 insertions, 0 deletions
diff --git a/module/util.scm b/module/util.scm
index bf7d746d..1a7c5471 100644
--- a/module/util.scm
+++ b/module/util.scm
@@ -123,6 +123,11 @@
(lambda (k k* ...)
(let* (rest ...)
body ...)))]
+
+ ;; Declare variable without a value (actuall #f).
+ ;; Useful for inner mutation.
+ [(_ (v rest ...) body ...)
+ (let* ((v #f) rest ...) body ...)]
))
(define (improper->proper-list lst len)
diff --git a/tests/let.scm b/tests/let.scm
index 21b23754..53f39e4c 100644
--- a/tests/let.scm
+++ b/tests/let.scm
@@ -10,5 +10,9 @@
(test-assert (let* (((a) '(#t))) a))
(test-equal '(2) (let* (((a . b) '(1 2))) b))
(test-equal '(3 4) (let* (((a b . c) '(1 2 3 4))) c))
+(test-equal 10 (let* (x) (set! x 10) x))
+(test-equal 30 (let* (x y) (set! x 10) (set! y 20) (+ x y)))
+(test-assert (let* (x) (not x)))
+(test-equal 6 (let* ((x 1) y z) (set! y 2) (set! z 3) (+ x y z)))
(test-end "let")