<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.
Calico « California State University San Marcos «
call-by-name » call-by-need » call-by-reference