by Richard Russell, July 2007
Although the FOR…NEXT loop is fundamental to all versions of BASIC, dialects differ in its detailed implementation. In BBC BASIC FOR…NEXT loops have the following properties:
The following examples illustrate this behaviour:
FOR i% = 1 TO 0 PRINT i% NEXT i%
FOR i% = 1 TO 10 NEXT i% PRINT i%
The first loop prints 1, even though the 'finish' value is less than the 'start' value.
The second loop prints 11, which is one more than the 'finish' value.
On occasion you may wish to emulate the behaviour of a different BASIC dialect, for example when porting a program to BBC BASIC. One convenient way of doing that is to use the EXIT FOR statement.
Some BASIC dialects do not execute the FOR loop at all if the initial conditions aren't met, i.e. the 'finish' value is less than the 'start' value (with a positive STEP). To emulate that behaviour use code similar to the following:
FOR loopvar = start TO finish IF loopvar > finish THEN EXIT FOR REM Body of loop here NEXT loopvar
Some BASIC dialects exit the loop with the loop variable equal to the 'finish' value. To emulate that behaviour use code similar to the following:
FOR loopvar = start TO finish REM Body of loop here IF loopvar >= finish THEN EXIT FOR NEXT loopvar
Of course you can combine both behaviours if you wish:
FOR loopvar = start TO finish IF loopvar > finish THEN EXIT FOR REM Body of loop here IF loopvar >= finish THEN EXIT FOR NEXT loopvar
In all cases if the STEP is negative you need to reverse the comparisons:
FOR loopvar = start TO finish STEP -delta IF loopvar < finish THEN EXIT FOR REM Body of loop here IF loopvar <= finish THEN EXIT FOR NEXT loopvar