/* This attempts to generate all unique sets of up to 4 factors for products less than a max - using the LABEL: multifor, next LABEL {level} statement. However, when "next LABEL i" is executed none of the lower level indexes are updated. Most critically, dependent lower bounds are not recalculated. Is this the intended behavior? I would expect it be the same as a break statement at level i+1, ie "skip the rest of level i+1", which would increment level i and reset all lower levels. The example program multinexttest.frink works because the bounds are independent and the condition for the "next LABEL i" statement is only triggered when index i changes. If there are situations for both behaviors, I can only suggest: next LABEL i updateLower=false *or the desired default */ limit = 5 maxp = 11 LABEL: multifor [fa, fb, fc, fd] = [new range[ 1, limit], new range[fa, limit], new range[fb, limit], new range[fc, limit] ] { pf = [fa, fb, fc, fd] prod = 1 for aa = 0 to 3 { prod = prod * pf@aa if prod > maxp { i = aa - 1 println["$pf > $maxp @$aa next $i"] next LABEL i } } println["$pf = $prod"] } /* multifor [fa, fb, fc, fd] = [new range[ 1, limit], new range[ 1, limit], new range[ 1, limit], new range[ 1, limit] ] multifor [fa, fb, fc, fd] = [new range[ 1, limit], new range[fa, limit], new range[fb, limit], new range[fc, limit] ] */