kw-hash-lambda.rkt (1150B)
1 #lang racket/base 2 3 (provide kw-hash-lambda kw-hash-case-lambda) 4 5 (require "kw-lists-lambda.rkt" 6 "kw-hash.rkt" 7 (for-syntax racket/base 8 syntax/parse 9 )) 10 (module+ test 11 (require rackunit)) 12 13 (define-syntax kw-hash-lambda 14 (lambda (stx) 15 (syntax-parse stx 16 [(kw-hash-lambda rest-args #:kws kw-hash:id body:expr ...+) 17 #'(kw-lists-lambda kws kw-args rest-args 18 (let ([kw-hash (keyword-app-make-kw-hash kws kw-args)]) 19 body ...))]))) 20 21 (define-syntax kw-hash-case-lambda 22 (lambda (stx) 23 (syntax-parse stx 24 [(kw-hash-case-lambda #:kws kw-hash:id [rest-args body:expr ...+] ...) 25 #'(kw-lists-case-lambda kws kw-args 26 [rest-args 27 (let ([kw-hash (keyword-app-make-kw-hash kws kw-args)]) 28 body ...)] 29 ...)]))) 30 31 (module+ test 32 (test-case "kw-hash-lambda" 33 (define proc 34 (kw-hash-lambda rest-args #:kws kw-hash 35 (list rest-args kw-hash))) 36 (check-equal? (proc 0 1 2 #:a 'a #:b 'b) 37 (list '(0 1 2) (hash '#:a 'a '#:b 'b))) 38 (check-equal? (object-name proc) 'proc) 39 ))