If (I>86) And (I<95) then Continue; 
What does continue do exactly?  Loop back to the beginning of the for loop 
right away?   I didn't even know there was such a command.. it's not mentioned 
here:
https://wiki.lazarus.freepascal.org/FOR..DO

only break is mentioned.

As I said, there are ways around it, and that was just a stupid example that 
proves it works in {$Mode TP}  I have some really complicated nested for loops 
and changing the loop variable is really useful.. also it allows you to skip 
cycling around in the loop.  I just don't see why having the limitation, there 
is no technical reason that the for loop couldn't change that I can see.. 
especially since it works in TP mode.   Yes, I can work around it.. change to a 
while loop instead where or something.. where you can change variables all you 
want... I just don't see the point of enforcing this 
no-changing-the-for-loop-variable rule... 

Pascal doesn't have things like step... but if I modify the for variable myself 
I can make it act like it had step

{$Mode TP}
Var
   I:Byte;
Begin
  For I := 0 to 100 do
    Begin
       Write(I,' ');
       Inc(I,3);
    End;
End.
0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100

Or 

{$Mode TP}
Var
   I:Byte;
Begin
  For I := 101 downto 0 do
    Begin
       Dec(I);
       Write(I,' ');
    End;
End.
100 98 96 94 92 90 88 86 84 82 80 78 76 74 72 70 68 66 64 62 60 58 56 54 52 50 
48 46 44 42 40 38 36 34 32 30 28 26 24 22 20 18 16 14 12 10 8 6 4 2 0

Yes lots of ways to do these things... but could always do it with for loops 
with Pascal before.. and they work fine this way in FPC if you are in TP mode, 
so why not just allow it all the time?... just to have the flexibility to do 
what you want.    It would just be nice to get everything to work in all my 
units all the time.. but if I use TP mode, then I can't do things like use case 
statements with strings.

James

-----Original Message-----
From: fpc-pascal <fpc-pascal-boun...@lists.freepascal.org> On Behalf Of Martin 
Wynne
Sent: Monday, September 9, 2019 8:53 AM
To: fpc-pascal@lists.freepascal.org
Subject: Re: [fpc-pascal] Illegal counter variable?

On 09/09/2019 13:38, James Richters wrote:
> Var
>     I:Byte;
> Begin
>    I:=57;
>    For I := I to 100 do
>      Begin
>         If I=87 then
>            I:=95;
>         Write(I,' ');
>      End;
> End.

Why not:

Var
     I:Byte;
Begin
    I:=57;
    For I := I to 100 do
      Begin
         If (I>86) And (I<95) then Continue;
         Write(I,' ');
      End;
End.

which is much easier to follow the logic.

cheers,

Martin.
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org 
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to