The exec operation runs a routine that is already represented as an
instruction array and returns that routine’s output. The routine can be
supplied explicitly or taken from the caller’s current value of _. Any
additional tokens after the routine become the array passed to the routine as
its initial _. No other caller variables are visible inside the routine, and
assignments within the routine never affect the caller.
The syntax of exec is
[ $destination ] exec [ routine ] [ arg1 arg2 ... ]
$destination is optional; if it is omitted, the result is assigned to the
caller’s _. The routine token is also optional. When it is omitted, the
call acts as exec _, which means the routine is read from the current _.
When routine is given, it must be a $variable whose value is an instruction
array produced earlier by code or compile. After the routine, zero or more
argument tokens may appear; these are collected into an array and passed to the
routine as its initial _. If no arguments are provided, the callee starts
with an empty array.
Running the routine stored in _ with no arguments looks like this:
exec
Running the routine held in $sumFn, passing four numbers as the input array,
looks like this:
$total exec $sumFn 1 2 3 4
Combining compilation and execution-first create a routine, then run it with a list-can be done like this:
$adder compile "reduce add"
$list let [10 20 30]
$result exec $adder $list
exec raises an error if the routine value (after the _ shorthand is
resolved) is not an instruction array, or if no routine is available. The
operation never mutates its inputs; it always creates a fresh routine context
and returns a new value that follows single-assignment rules.