diff options
author | Hugo Hörnquist <hugo@lysator.liu.se> | 2019-04-05 18:15:05 +0200 |
---|---|---|
committer | Hugo Hörnquist <hugo@lysator.liu.se> | 2019-04-05 18:15:05 +0200 |
commit | 2876e0b6dda45b41e1f8d88b748b30fe3c69e971 (patch) | |
tree | 4cd63a87e91f22472d3c07160d4a28d9ac849911 | |
parent | Add enumerate and map-each. (diff) | |
download | calp-2876e0b6dda45b41e1f8d88b748b30fe3c69e971.tar.gz calp-2876e0b6dda45b41e1f8d88b748b30fe3c69e971.tar.xz |
Add extra case to let*.
-rw-r--r-- | module/util.scm | 5 | ||||
-rw-r--r-- | tests/let.scm | 4 |
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") |