Add SRFI 219: Define higher-order lambda

This commit is contained in:
Lassi Kortela 2021-04-18 12:21:32 +03:00
parent e74614d4b3
commit 7178d22928
3 changed files with 38 additions and 0 deletions

9
lib/srfi/219.sld Normal file
View file

@ -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))))))

27
lib/srfi/219/test.sld Normal file
View file

@ -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))))))))

View file

@ -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)