diff options
author | Andy Wingo <wingo@pobox.com> | 2010-04-08 21:01:52 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2010-04-08 21:01:52 +0200 |
commit | e39d0b76684ae8e6f2bffa511e28ff2c2d44a106 (patch) | |
tree | d141387e5681adcf89735f79ba2f07ede885325e | |
parent | 1a461493a33d44f41a7d5245df142ef000c09db3 (diff) | |
download | guile-e39d0b76684ae8e6f2bffa511e28ff2c2d44a106.tar.gz |
fix curried definitions for value defines
* module/ice-9/curried-definitions.scm: Allow definitions of values with
define and define*.
* test-suite/tests/curried-definitions.test: Add tests.
-rw-r--r-- | module/ice-9/curried-definitions.scm | 8 | ||||
-rw-r--r-- | test-suite/tests/curried-definitions.test | 40 |
2 files changed, 45 insertions, 3 deletions
diff --git a/module/ice-9/curried-definitions.scm b/module/ice-9/curried-definitions.scm index d7db1f0a8..d55f1fb6a 100644 --- a/module/ice-9/curried-definitions.scm +++ b/module/ice-9/curried-definitions.scm @@ -25,7 +25,9 @@ (lambda rest body body* ...))) ((_ (head . rest) body body* ...) (define head - (lambda rest body body* ...))))) + (lambda rest body body* ...))) + ((_ . rest) + (define . rest)))) (define-syntax cdefine* (syntax-rules () @@ -34,4 +36,6 @@ (lambda* rest body body* ...))) ((_ (head . rest) body body* ...) (define* head - (lambda* rest body body* ...))))) + (lambda* rest body body* ...))) + ((_ . rest) + (define* . rest)))) diff --git a/test-suite/tests/curried-definitions.test b/test-suite/tests/curried-definitions.test index 650288f5c..b4a1f6509 100644 --- a/test-suite/tests/curried-definitions.test +++ b/test-suite/tests/curried-definitions.test @@ -43,4 +43,42 @@ (primitive-eval '(let () (define (((foo)) x) (+ x 34)) - (((foo)) 300)))))) + (((foo)) 300))))) + + (pass-if "just a value" + (equal? 444 + (primitive-eval '(let () + (define foo 444) + foo))))) + +(with-test-prefix "define*" + (pass-if "define* works as usual" + (equal? 34 + (primitive-eval '(let () + (define* (foo) + 34) + (foo))))) + (pass-if "define* works as usual (2)" + (equal? 134 + (primitive-eval '(let () + (define* (foo x) + (+ x 34)) + (foo 100))))) + (pass-if "currying once" + (equal? 234 + (primitive-eval '(let () + (define* ((foo) x) + (+ x 34)) + ((foo) 200))))) + (pass-if "currying twice" + (equal? 334 + (primitive-eval '(let () + (define* (((foo)) x) + (+ x 34)) + (((foo)) 300))))) + + (pass-if "just a value" + (equal? 444 + (primitive-eval '(let () + (define* foo 444) + foo))))) |