Parameter-Utils: Parameterization utilities

_Parameter-Utils: Parameterization utilities_

Written by: Carl Eastlund (cce at ccs dot neu dot edu)
Keywords: _parameter_, _parameterize_, _parameterization_

This software is distributed under a BSD-style license (see license.txt).


Macro provided by _parameter-utils.ss_:

> (param-lambda (ARG-CLAUSE ...) expr ...)
  where ARG-CLAUSE may be:
    [id default]
    [id => parameter]
  expr : Expression
  id : Identifier
  default : Expression
  parameter : Expression

This macro produces an anonymous function, much like lambda or opt-lambda.  It
may be used as a drop-in replacement for opt-lambda (and therefore also for
lambda).  It has one additional feature, the [id => parameter] argument clause.
In this case, the named argument corresponds to the given parameter.  When the
argument is provided, the parameter is given the argument's value during
execution of the function's body.  When the argument is not provided, it is
given the parameter's value at the time of the function's invocation.

Example 1:

((param-lambda (x [y 0] [z => param]) BODY ...) 1 2 3)
is the same as
(let ([x 1] [y 2] [z 3]) (parameterize ([param z]) BODY ...))

Example 2:

((param-lambda (x [y 0] [z => param]) BODY ...) 1)
is the same as
(let ([x 1] [y 0] [z (param)]) BODY ...)