multifortest2.frink

Download or view multifortest2.frink in plain text format

/*
  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] ]
*/


Download or view multifortest2.frink in plain text format


This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 19971 days, 18 hours, 25 minutes ago.