# Programmer-defined argument evaluation regimes
# Ralph E. Griswold and Michael Novak
every i := 1 to *a do x[i] := @a[i] | fail
if done[i] = 1 then ((x[i] := @a[i]) | (done[i] := 0))
if not(!done = 1) then fail
5 : a[1](a[2],a[3],a[4],a[5])
6 : a[1](a[2],a[3],a[4],a[5],a[6])
7 : a[1](a[2],a[3],a[4],a[5],a[6],a[7])
8 : a[1](a[2],a[3],a[4],a[5],a[6],a[7],a[8])
9 : a[1](a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9])
10 : a[1](a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10])
default : stop("Call : too many args.")
x[(i + 1)/2] := @a[i + 1] | fail
every i := 1 to *a do x[i] := @a[i] | fail
if not(x[i] := @a[i]) then {