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 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.