From a1d943146bfce6c737b9c3a4477e6eab9ba5015f Mon Sep 17 00:00:00 2001 From: Eli Barzilay Date: Sun, 3 May 2009 20:41:37 +0000 Subject: [PATCH] added a nullary case to compose svn: r14697 --- collects/scheme/private/list.ss | 3 ++- collects/scribblings/reference/procedures.scrbl | 3 ++- collects/tests/mzscheme/function.ss | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/collects/scheme/private/list.ss b/collects/scheme/private/list.ss index bd3dc7565c..07305f74b5 100644 --- a/collects/scheme/private/list.ss +++ b/collects/scheme/private/list.ss @@ -232,7 +232,7 @@ (define compose (case-lambda - [(f) (if (procedure? f) + [(f) (if (procedure? f) f (raise-type-error 'compose "procedure" f))] [(f g) @@ -247,6 +247,7 @@ (call-with-values (lambda () (g a)) f)) (lambda args (call-with-values (lambda () (apply g args)) f)))))] + [() values] [(f . more) (if (procedure? f) (let ([m (apply compose more)]) diff --git a/collects/scribblings/reference/procedures.scrbl b/collects/scribblings/reference/procedures.scrbl index 329ca50ed4..c3fa23d127 100644 --- a/collects/scribblings/reference/procedures.scrbl +++ b/collects/scribblings/reference/procedures.scrbl @@ -38,7 +38,8 @@ Returns a procedure that composes the given functions, applying the last @scheme[proc] first and the first @scheme[proc] last. The composed functions can consume and produce any number of values, as long as each function produces as many values as the preceding -function consumes. +function consumes. When no @scheme[proc] arguments are given, the +result is @scheme[values]. @mz-examples[ ((compose - sqrt) 10) diff --git a/collects/tests/mzscheme/function.ss b/collects/tests/mzscheme/function.ss index 9dfa210674..13d5a524d3 100644 --- a/collects/tests/mzscheme/function.ss +++ b/collects/tests/mzscheme/function.ss @@ -14,6 +14,7 @@ (test 'hi (compose (case-lambda [(x) 'bye][(y z) 'hi]) (lambda () (values 1 2)))) (test 'ok (compose (lambda () 'ok) (lambda () (values)))) (test 'ok (compose (lambda () 'ok) (lambda (w) (values))) 5) +(test 0 (compose) 0) (test-values '(1 2 3) (lambda () ((compose (lambda (x) (values x (add1 x) (+ x 2))) (lambda (y) y)) 1))) (err/rt-test (compose 5))