op for(start:integer, until:integer, by:integer, vars:ForVars, body:ForBody)-> (ForVars*) = if start>until then nil else ( let result = body(start, vars); for(start+by, until, by, vars, body) + [result] ); obj ForVars; obj ForBody = op(integer,ForVars)->(ForVars); obj Vars < ForVars = k:integer, result:integer; op main(vars:Vars)->() = (*begin*) for(1, 10, 1, vars (* alt will work with struct compat: {2, 1} *), lambda(i:integer, vars':Vars)->(vars'':Vars) ( let result = vars.result * (i + vars.k); [vars.k, result] ) ) (*end*); (* OLD *) op main_old()->() = (*begin*) for(1, 10, 1, [2, 1], lambda(i:integer, k:integer, result:integer)->(integer,integer) ( let result = result * (i + k); [k, result] ) ) (*end*);