[Oberon] Eliminating RETURN statements

Hans Klaver hklaver at dds.nl
Fri Apr 10 01:46:07 CEST 2020

Chris Burrows wrote:

> However, the number of operators could be reduced by transforming it into a REPEAT statement. For example:
>    VAR k: INTEGER;
>    k := -1;
>      INC(k)
>    UNTIL (k > piecemax[i]) OR (p[i, k] & puzzl[j + k]);
>    RETURN k > piecemax[i]
>  END Fit;
> Personally I find that the absence of the NOTs make it easier to comprehend,

Chris, I fully agree. Very elegant! The code can even be made slightly more elegant:

   UNTIL (k > piecemax[i]) OR p[i, k] & puzzl[j + k]
   RETURN k > piecemax[i]
 END Fit;

One of the nice things of Oberon is that the precedence of the logical operators is emphasized by their size.
Because OR is larger than & , which is larger than ~ , it is easy to remember that

  a OR ~b & c  equals  (a) OR ((~b) & c)

The smaller the operator the more it 'binds' to the operand(s). The ~ operator binds most and so is evaluated first, the next in size, &, binds more than the larger OR and so & is evaluated before OR, which 'separates' its operands most and so is evaluated last. Easy! 

Hans Klaver

More information about the Oberon mailing list