411 REFERENCE · Wikibooks
The Sway Reference Manual/Lazy Evaluation
Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.
Many functional languages feature delayed (or lazy) evaluation of
function arguments, Unlike applicative order evaluation (used by C and Java),
where function arguments are evaluated before they are bound to formal
parameters, lazy evaluation delays evaluation until the actual values are
needed. This is accomplished by passing the argument as a thunk, which
is a data structure containing the actual expression forming the argument
and the environment in which the argument would have been evaluated under
applicative order.
Sway allows the programmer to decide whether or not lazy evaluation
should be used. To signify lazy evaluation, the formal parameter is
named starting with a dollar sign ($). When the actual value of the
argument is needed, the force function is used to evaluate the
argument expression in the thunk. Here is an example:
"sway" function f($x)
{
println("about to force...");
force($x);
}
f(println("hello"));
When this code is executed, we get the output:
about to force...
hello
Contrast this with the output of the following code, where the
formal parameter is named normally:
"sway" function f(x)
{
println("about to force...");
force(x);
}
f(println("hello"));
When this new code is executed, we get the output:
hello
about to force...
This is because the println must be evaluated before its
result is bound to the formal parameter x.
Exceptions Variadic Functions