[email protected] asked how to do a closure by having one macro
define another. The difficulty is in distinguishing which
macro a parameter belongs to--the inner or the outer. 
The solution is to hide parameter designations for the
iinner macro so they appear only upon expansion of the
outer macro. The following classic example illustrates
one way to do this.

specialize(unary,binary,value) produces a unary operation
by fixing the value of one the operands of a binary operation.

define(add,`($1+$2)')
define(div,`($1/$2)')
define(specialize,`define($1,`$2('$`1,$3)')')
specialize(succ,`add',1)
specialize(half,`div',2)

With these definitions, half(succ(4)) expands to ((4+1)/2)

Reply via email to