Source : Free On-Line Dictionary of Computing
call-by-name
(CBN) (Normal order reduction, leftmost, outermost reduction).
An argument passing convention (first provided by {ALGOL 60}?)
where argument expressions are passed unevaluated. This is
usually implemented by passing a pointer to some code which
will return the value of the argument and an environment
giving the values of its {free variable}s. This {evaluation
strategy} is guaranteed to reach a {normal form} if one
exists.
When used to implement {functional programming} languages,
call-by-name is usually combined with {graph reduction} to
avoid repeated evaluation of the same expression. This is
then known as {call-by-need}. The opposite of call-by-name is
{call-by-value} where arguments are evaluated before they are
passed to a function. This is more efficient but is less
likely to terminate in the presence of infinite data
structures and {recursive} functions. Arguments to {macro}s
are usually passed using call-by-name.
(1994-11-29)