| << Prev | - Up - | Next >> |
The module Loop contains procedures that represent recursive versions of common iteration schemes with integers.
For
{Loop.for+I1+I2+I3+P}
applies the unary procedure P to integers from I1 to I2 proceeding in steps of size I3. For example,
{For 1 11 3 Browse} displays the numbers 1, 4, 7, and 10 in the browser window, whereas
{For 11 1 ~3 Browse} displays the numbers 11, 8, 5, and 2.
ForThread
{Loop.forThread+I1+I2+I3+PX?Y}
applies the ternary procedure P to integers from I1 to I2 proceeding in steps of size I3 while threading an additional accumulator argument through the iteration. The procedure P takes the accumulator argument (initially set to X) and the loop index and returns an updated accumulator.
For example,
{ForThread 1 5 1 fun {$ Is I} I*I|Is end nil} yields the list [25 16 9 4 1] as output, whereas
{ForThread 5 1 ~1 fun {$ Is I} I*I|Is end nil} yields [1 4 9 16 25] as output.
Note that ForThread is similar to FoldL (see Section 6.3).
multiFor
{Loop.multiFor+Xs+P}
generalizes For (see above) to the case of multiple nested loops.
Xs is a list containing tuples of the form I1#I2#I3 specifying a loop by its start value I1, upper limit I2 and step size I3.
For example,
{Loop.multiFor [1#5#1 10#20#2] Browse} displays the lists [1 10], [1 12], ..., [5 20] in the browser.
multiForThread
{Loop.multiForThread+Xs+PX?Y}
generalizes ForThread (see above) to the case of multiple nested loops.
Xs is a list containing tuples of the form I1#I2#I3 specifying a loop by its start value I1, upper limit I2 and step size I3.
For example,
{Loop.multiForThread [1#2#1 5#4#~1]
fun {$ Is [I J]}
I#J|Is
end nil} yields the list [2#4 2#5 1#4 1#5] as output.
| << Prev | - Up - | Next >> |