from
The Free On-line Dictionary of Computing (8 July 2008)
call-by-name
CBN
<reduction> (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 a {thunk} - some code which will return the value of the
argument and an environment giving the values of its {free
variables}.
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 {macros} are usually passed using call-by-name.
(2006-05-27)