*** empty log message ***
original commit: 89756069b913e24574b536f36f9ec87803985644
This commit is contained in:
parent
838b443062
commit
84f81ab101
|
@ -7,16 +7,23 @@
|
||||||
(define compose
|
(define compose
|
||||||
(polymorphic
|
(polymorphic
|
||||||
(case-lambda
|
(case-lambda
|
||||||
[(f) f]
|
[(f) (if (procedure? f) f (raise-type-error 'compose "procedure" f))]
|
||||||
[(f g)
|
[(f g)
|
||||||
|
(let ([f (compose f)]
|
||||||
|
[g (compose g)])
|
||||||
(if (eqv? 1 (arity f)) ; optimize: don't use call-w-values
|
(if (eqv? 1 (arity f)) ; optimize: don't use call-w-values
|
||||||
(if (eqv? 1 (arity g)) ; optimize: single arity everywhere
|
(if (eqv? 1 (arity g)) ; optimize: single arity everywhere
|
||||||
(lambda (x) (f (g x)))
|
(lambda (x) (f (g x)))
|
||||||
(lambda args (f (apply g args))))
|
(lambda args (f (apply g args))))
|
||||||
|
(if (eqv? 1 (arity g)) ; optimize: single input
|
||||||
|
(lambda (a)
|
||||||
|
(call-with-values
|
||||||
|
(lambda () (g a))
|
||||||
|
f))
|
||||||
(lambda args
|
(lambda args
|
||||||
(call-with-values
|
(call-with-values
|
||||||
(lambda () (apply g args))
|
(lambda () (apply g args))
|
||||||
f)))]
|
f)))))]
|
||||||
[(f . more)
|
[(f . more)
|
||||||
(let ([m (apply compose more)])
|
(let ([m (apply compose more)])
|
||||||
(compose f m))])))
|
(compose f m))])))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user