www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

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