call-by-name definition 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
Arguments to macros
are usually passed using call-by-name.