The Free On-line Dictionary of Computing (30 December 2018):
(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
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.