Alternative FOR NEXT behaviour

by Richard Russell, July 2007

Although the FORNEXT 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