diff --git a/lib/srfi/219.sld b/lib/srfi/219.sld new file mode 100644 index 00000000..e8d2a752 --- /dev/null +++ b/lib/srfi/219.sld @@ -0,0 +1,9 @@ +(define-library (srfi 219) + (export define) + (import (rename (scheme base) (define native-define))) + (begin (define-syntax define + (syntax-rules () + ((define ((name . outer-args) . args) . body) + (define (name . outer-args) (lambda args . body))) + ((define head . body) + (native-define head . body)))))) diff --git a/lib/srfi/219/test.sld b/lib/srfi/219/test.sld new file mode 100644 index 00000000..8d19d49c --- /dev/null +++ b/lib/srfi/219/test.sld @@ -0,0 +1,27 @@ +(define-library (srfi 219 test) + (export run-tests) + (import (chibi) (chibi test) (rename (srfi 219) (define define-219))) + (begin + (define (run-tests) + (test-group + "srfi-219: define higher-order lambda" + + (let () + (define-219 ((greet/prefix prefix) suffix) + (string-append prefix " " suffix)) + (let ((greet (greet/prefix "Hello"))) + (test "Hello there!" (greet "there!")))) + + (let () + (define-219 ((append-to . a) . b) + (apply append (append a b))) + (test '() + ((append-to '()) '())) + (test '(1 2 3 4 5 6 7 8) + ((append-to '(1 2) '(3 4)) '(5 6) '(7 8)))) + + (let () + (define-219 (((jenga a b) c d)) + (list a b c d)) + (test '(1 2 3 4) + (((jenga 1 2) 3 4)))))))) diff --git a/tests/lib-tests.scm b/tests/lib-tests.scm index 8a200931..197a5467 100644 --- a/tests/lib-tests.scm +++ b/tests/lib-tests.scm @@ -34,6 +34,7 @@ (rename (srfi 158 test) (run-tests run-srfi-158-tests)) (rename (srfi 160 test) (run-tests run-srfi-160-tests)) (rename (srfi 166 test) (run-tests run-srfi-166-tests)) + (rename (srfi 219 test) (run-tests run-srfi-219-tests)) (rename (scheme bytevector-test) (run-tests run-scheme-bytevector-tests)) (rename (chibi base64-test) (run-tests run-base64-tests)) (rename (chibi bytevector-test) (run-tests run-bytevector-tests)) @@ -103,6 +104,7 @@ (run-srfi-158-tests) (run-srfi-160-tests) (run-srfi-166-tests) +(run-srfi-219-tests) (run-scheme-bytevector-tests) (run-base64-tests) (run-bytevector-tests)