Case-Lambda Library
The (scheme case-lambda)
library exports the case-lambda
syntax.
For more information see the R7RS Scheme Specification.
case-lambda
Syntax
(case-lambda {clause} ...)
Syntax: Each {clause}
is of the form ({formals} {body})
, where {formals}
and {body}
have the same syntax as in a lambda expression.
Semantics: A case-lambda
expression evaluates to a procedure that accepts a variable number of arguments and is lexically scoped in the same manner as a procedure resulting from a lambda expression.
When the procedure is called, the first {clause}
for which the arguments agree with {formals}
is selected, where agreement is specified as for the {formals}
of a lambda expression. The variables of {formals}
are bound to fresh locations, the values of the arguments are stored in those locations, the {body}
is evaluated in the extended environment, and the results of {body}
are returned as the results of the procedure call.
It is an error for the arguments not to agree with the {formals}
of any {clause}
.
(define range
(case-lambda
((e) (range 0 e))
((b e) (do ((r '() (cons e r))
(e (- e 1) (- e 1)))
((< e b) r)))))
(range 3) => (0 1 2)
(range 3 5) => (3 4)