The evaluation of a ["Block"] expression follows these steps:
Create a new scope
Set the value of the symbols in _dictionary_ in this scope.
The dictionary argument can be a ["Dictionary"] expression, a
["KeyValuePair"] expression, a ["Pair"] expression or a ["Tuple"] expression.
Evaluate each expr sequentially.
If the value of an expression is a ["Return"] expression, a ["Break"]
expression or a ["Continue"] expression, no more expressions are
evaluated and the value of the ["Block"] is this expression.
Otherwise, the value of the ["Block"] expression is the value of the last
expression
The Fold, Loop, Sum and Product functions are iteration control
structures that share a similar form.
Their first argument, body is an expression that gets evaluated repeatedly.
The body expression is evaluated with an implicit argument _ whose value is
the current iteration element.
Their second argument, iterator can take the following shapes:
["List", _expr-1_, ..._expr-n]: the _ implicit argument takes in turn each
element
["Range", _upper_]: the _ implicit argument is assigned
the value 1, then incremented by 1 until it reaches at least upper.
["Range", _lower_, _upper_]: the _ implicit argument is assigned
the values from the lower bound to the upper bound of the range, with a step of 1.
["Range", _lower_, _upper_, _step_]: the _ implicit argument is assigned
the value lower then incremented by step until it reaches at least upper.
To use a named argument, use a ["Function"] expression for the body.