[fpc-devel] Fwd: While - Otherwise Statement

David W Noon david.w.noon at googlemail.com
Tue Oct 13 00:15:31 CEST 2015


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Mon, 12 Oct 2015 15:11:18 -0400, Wkitty42 (wkitty42 at windstream.net)
wrote about "Re: [fpc-devel] Fwd: While - Otherwise Statement" (in
<561C05D6.4010403 at windstream.net>):

> On 10/12/2015 02:02 PM, Dmitry Boyarintsev wrote:
>> 
>> The next step would probably be controlled "break", where a user
>> would be able to specify how many nested loops needed to broken
>> from.
> 
> ROTFLMAO! if you need or desire something like that then set a 
> breakcounter and break... in the next outer block, check
> breakcounter to see if you need to break again... if so,
> dec(breakcounter) and break... then check it again in the next
> outer block... and so on and so on until breakcounter=0... why
> should the compiler have to do your logic work for you? ;)

Hi Mark,

You might have seen me write things like this in the old OS2PROG echo
of Fidonet some 20+ years ago. ... :-)

The only language I know that offers that level of control is PL/I,
where the break statement is coded as LEAVE.  It is handled by
labelling the loop control statement and coding the required label in
the LEAVE statement. For example:

   loop_1: DO i = 1 TO m;
      loop_2 : DO j = 1 TO n;
         loop_3: DO k = 1 TO p;
            ...
            IF some_condition THEH
               LEAVE loop_3;
            ...
            IF another_condition THEH
               LEAVE loop_2;
            ...
            IF some_other_condition THEH
               LEAVE loop_1;
            ...
         END loop_3;
      END loop_2;
   END loop_1;

If the label is omitted then the immediately containing loop is left.

This allows any of the nested loops to be escaped, potentially all the
way out. I guess the corresponding syntax in a Pascal-esque style
would be:

   loop_1: FOR i := 1 TO m DO
   BEGIN
      loop_2: FOR j := 1 TO n DO
      BEGIN
         loop_3: FOR k := 1 TO p DO
         BEGIN
            ...
            IF (some_condition) THEN
               BREAK loop_1;
            ...
            IF (another_condition) THEN
               BREAK loop_2;
            ...
            IF (some_other_condition) THEN
               BREAK loop_3;
         END
      END
   END;

If we're being strictly Pascal, the labels would need to be declared
at the head of the procedure -- and if we're really strict they should
be numeric.
- -- 
Regards,

Dave  [RLU #314465]
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
david.w.noon at googlemail.com (David W Noon)
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iEYEARECAAYFAlYcMQMACgkQogYgcI4W/5Sl3wCgtG87fG2aCEuxkVCUrBCmxwCm
fSkAoNgXwMSNA/R4AKjDEZsNktglOqvF
=m3vh
-----END PGP SIGNATURE-----



More information about the fpc-devel mailing list