Add argument checking to conjoin and disjoin.
This commit is contained in:
parent
0e6baea9f6
commit
60e7f1b7c7
|
@ -96,40 +96,56 @@
|
||||||
(define conjoin
|
(define conjoin
|
||||||
(case-lambda*
|
(case-lambda*
|
||||||
[(f ... 8)
|
[(f ... 8)
|
||||||
(make-intermediate-procedure
|
(begin
|
||||||
'conjoined
|
(for ([f* (in-list (list f ...))])
|
||||||
[(x (... ...) 2) (and (f x (... ...)) ...)]
|
(unless (procedure? f*)
|
||||||
[xs (and (apply f xs) ...)]
|
(raise-argument-error 'conjoin "procedure?" f*)))
|
||||||
#:keyword
|
(make-intermediate-procedure
|
||||||
[(keys vals . args)
|
'conjoined
|
||||||
(and (keyword-apply f keys vals args) ...)])]
|
[(x (... ...) 2) (and (f x (... ...)) ...)]
|
||||||
|
[xs (and (apply f xs) ...)]
|
||||||
|
#:keyword
|
||||||
|
[(keys vals . args)
|
||||||
|
(and (keyword-apply f keys vals args) ...)]))]
|
||||||
[fs
|
[fs
|
||||||
(make-intermediate-procedure
|
(begin
|
||||||
'conjoined
|
(for ([f* (in-list fs)])
|
||||||
[(x ... 2) (andmap (lambda (f) (f x ...)) fs)]
|
(unless (procedure? f*)
|
||||||
[xs (andmap (lambda (f) (apply f xs)) fs)]
|
(raise-argument-error 'conjoin "procedure?" f*)))
|
||||||
#:keyword
|
(make-intermediate-procedure
|
||||||
[(keys vals . args)
|
'conjoined
|
||||||
(andmap (lambda (f) (keyword-apply f keys vals args)) fs)])]))
|
[(x ... 2) (andmap (lambda (f) (f x ...)) fs)]
|
||||||
|
[xs (andmap (lambda (f) (apply f xs)) fs)]
|
||||||
|
#:keyword
|
||||||
|
[(keys vals . args)
|
||||||
|
(andmap (lambda (f) (keyword-apply f keys vals args)) fs)]))]))
|
||||||
|
|
||||||
(define disjoin
|
(define disjoin
|
||||||
(case-lambda*
|
(case-lambda*
|
||||||
[(f ... 8)
|
[(f ... 8)
|
||||||
(make-intermediate-procedure
|
(begin
|
||||||
'disjoined
|
(for ([f* (in-list (list f ...))])
|
||||||
[(x (... ...) 2) (or (f x (... ...)) ...)]
|
(unless (procedure? f*)
|
||||||
[xs (or (apply f xs) ...)]
|
(raise-argument-error 'conjoin "procedure?" f*)))
|
||||||
#:keyword
|
(make-intermediate-procedure
|
||||||
[(keys vals . args)
|
'disjoined
|
||||||
(or (keyword-apply f keys vals args) ...)])]
|
[(x (... ...) 2) (or (f x (... ...)) ...)]
|
||||||
|
[xs (or (apply f xs) ...)]
|
||||||
|
#:keyword
|
||||||
|
[(keys vals . args)
|
||||||
|
(or (keyword-apply f keys vals args) ...)]))]
|
||||||
[fs
|
[fs
|
||||||
(make-intermediate-procedure
|
(begin
|
||||||
'disjoined
|
(for ([f* (in-list fs)])
|
||||||
[(x ... 2) (ormap (lambda (f) (f x ...)) fs)]
|
(unless (procedure? f*)
|
||||||
[xs (ormap (lambda (f) (apply f xs)) fs)]
|
(raise-argument-error 'conjoin "procedure?" f*)))
|
||||||
#:keyword
|
(make-intermediate-procedure
|
||||||
[(keys vals . args)
|
'disjoined
|
||||||
(ormap (lambda (f) (keyword-apply f keys vals args)) fs)])]))
|
[(x ... 2) (ormap (lambda (f) (f x ...)) fs)]
|
||||||
|
[xs (ormap (lambda (f) (apply f xs)) fs)]
|
||||||
|
#:keyword
|
||||||
|
[(keys vals . args)
|
||||||
|
(ormap (lambda (f) (keyword-apply f keys vals args)) fs)]))]))
|
||||||
|
|
||||||
(define-syntax (make-intermediate-procedure stx)
|
(define-syntax (make-intermediate-procedure stx)
|
||||||
(syntax-case stx [quote]
|
(syntax-case stx [quote]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user