commit 525563989f8a313cefedecfe864280a9fccac3da parent e5d829dc269dd205597c1c2393fbea0e8d033499 Author: AlexKnauth <alexander@knauth.org> Date: Tue, 9 Aug 2016 17:53:45 -0500 rename to kw-formals->arity+keywords Diffstat:
| M | kw-utils/arity+keywords/syntax.rkt | | | 61 | ++++++++++++++++++++++++++++++++++++++++--------------------- |
1 file changed, 40 insertions(+), 21 deletions(-)
diff --git a/kw-utils/arity+keywords/syntax.rkt b/kw-utils/arity+keywords/syntax.rkt @@ -1,6 +1,10 @@ #lang racket/base -(provide kw-formals->arity) +(provide kw-formals->arity+keywords + kw-formals->arity + kw-formals->required-kws + kw-formals->allowed-kws + ) (require racket/list syntax/parse @@ -8,8 +12,8 @@ (module+ test (require rackunit)) -;; kw-formals->arity : Syntax -> Arity+Keywords -(define (kw-formals->arity stx) +;; kw-formals->arity+keywords : Syntax -> Arity+Keywords +(define (kw-formals->arity+keywords stx) (syntax-parse stx [((~or arg1:id (~seq kw2:keyword arg2:id) @@ -39,36 +43,51 @@ (syntax->datum #'[kw2 ... kw5 ... kw3 ... kw6 ...]))] )) +;; kw-formals->arity : Syntax -> Normalized-Arity +(define (kw-formals->arity stx) + (arity+keywords-arity (kw-formals->arity+keywords stx))) + +;; kw-formals->required-kws : Syntax -> (Listof Keyword) +(define (kw-formals->required-kws stx) + (arity+keywords-required-kws (kw-formals->arity+keywords stx))) + +;; kw-formals->allowed-kws : Syntax -> (Listof Keyword) +(define (kw-formals->allowed-kws stx) + (arity+keywords-allowed-kws (kw-formals->arity+keywords stx))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (module+ test ;; without keywords - (check-equal? (kw-formals->arity #'()) (arity+keywords 0 '() '())) - (check-equal? (kw-formals->arity #'(a)) (arity+keywords 1 '() '())) - (check-equal? (kw-formals->arity #'(a b c d e)) (arity+keywords 5 '() '())) - (check-equal? (kw-formals->arity #'(a b [c 2])) (arity+keywords (list 2 3) '() '())) - (check-equal? (kw-formals->arity #'(a b [c 2] [d 3])) (arity+keywords (list 2 3 4) '() '())) - (check-equal? (kw-formals->arity #'rst) (arity+keywords (arity-at-least 0) '() '())) - (check-equal? (kw-formals->arity #'(a b . rst)) + (check-equal? (kw-formals->arity+keywords #'()) (arity+keywords 0 '() '())) + (check-equal? (kw-formals->arity+keywords #'(a)) (arity+keywords 1 '() '())) + (check-equal? (kw-formals->arity+keywords #'(a b c d e)) (arity+keywords 5 '() '())) + (check-equal? (kw-formals->arity+keywords #'(a b [c 2])) + (arity+keywords (list 2 3) '() '())) + (check-equal? (kw-formals->arity+keywords #'(a b [c 2] [d 3])) + (arity+keywords (list 2 3 4) '() '())) + (check-equal? (kw-formals->arity+keywords #'rst) + (arity+keywords (arity-at-least 0) '() '())) + (check-equal? (kw-formals->arity+keywords #'(a b . rst)) (arity+keywords (arity-at-least 2) '() '())) - (check-equal? (kw-formals->arity #'(a b [c 2] [d 3] . rst)) + (check-equal? (kw-formals->arity+keywords #'(a b [c 2] [d 3] . rst)) (arity+keywords (arity-at-least 2) '() '())) ;; with keywords - (check-equal? (kw-formals->arity #'(#:a a)) (arity+keywords 0 '(#:a) '(#:a))) - (check-equal? (kw-formals->arity #'(#:a [a 0])) (arity+keywords 0 '() '(#:a))) - (check-equal? (kw-formals->arity #'(a #:b b)) (arity+keywords 1 '(#:b) '(#:b))) - (check-equal? (kw-formals->arity #'(a #:b [b 1])) (arity+keywords 1 '() '(#:b))) - (check-equal? (kw-formals->arity #'(a #:b b #:c [c 2] d e)) + (check-equal? (kw-formals->arity+keywords #'(#:a a)) (arity+keywords 0 '(#:a) '(#:a))) + (check-equal? (kw-formals->arity+keywords #'(#:a [a 0])) (arity+keywords 0 '() '(#:a))) + (check-equal? (kw-formals->arity+keywords #'(a #:b b)) (arity+keywords 1 '(#:b) '(#:b))) + (check-equal? (kw-formals->arity+keywords #'(a #:b [b 1])) (arity+keywords 1 '() '(#:b))) + (check-equal? (kw-formals->arity+keywords #'(a #:b b #:c [c 2] d e)) (arity+keywords 3 '(#:b) '(#:b #:c))) - (check-equal? (kw-formals->arity #'(a #:b [b 1] c [d 3] #:e e)) + (check-equal? (kw-formals->arity+keywords #'(a #:b [b 1] c [d 3] #:e e)) (arity+keywords (list 2 3) '(#:e) '(#:b #:e))) - (check-equal? (kw-formals->arity #'(a #:b b c #:d [d 3] [e 2] #:f f [g 3])) + (check-equal? (kw-formals->arity+keywords #'(a #:b b c #:d [d 3] [e 2] #:f f [g 3])) (arity+keywords (list 2 3 4) '(#:b #:f) '(#:b #:d #:f))) - (check-equal? (kw-formals->arity #'(#:a a . rst)) + (check-equal? (kw-formals->arity+keywords #'(#:a a . rst)) (arity+keywords (arity-at-least 0) '(#:a) '(#:a))) - (check-equal? (kw-formals->arity #'(a #:b [b 1] c #:d d . rst)) + (check-equal? (kw-formals->arity+keywords #'(a #:b [b 1] c #:d d . rst)) (arity+keywords (arity-at-least 2) '(#:d) '(#:b #:d))) - (check-equal? (kw-formals->arity #'(a #:b b c [d 2] [e 3] . rst)) + (check-equal? (kw-formals->arity+keywords #'(a #:b b c [d 2] [e 3] . rst)) (arity+keywords (arity-at-least 2) '(#:b) '(#:b))) )