[Oberon] Tidyness of iteration.

John R. Strohm strohm at airmail.net
Tue Nov 15 04:09:10 CET 2016


NUTS.

Someday I'll learn to read before I type.

That won't work.

You need the initial Texts.Read(R,ch) before the WHILE.

A decent compiler should collapse the two READ calls into one.

-----Original Message----- 
From: John R. Strohm
Sent: Monday, November 14, 2016 6:01 PM
To: ETH Oberon and related systems
Subject: Re: [Oberon] Tidyness of iteration.

Depending on the definition of R.eot after Texts.OpenReader(R, t, 0) but
before Texts.Read(R, ch), you MIGHT be able to get away with this:

(* Using WHILE, Texts.Read is duplicated. *)
PROCEDURE WHILEiteration();
BEGIN
  Texts.OpenReader(R, t, 0);
  WHILE ~R.eot
    (* Process ch *);
    Texts.Read(R, ch)
  END
END WHILEinteration.

Wirth originally defined (or tried to define) READ() and EOF() in PASCAL to
(at least attempt to) work this way.

-----Original Message----- 
From: peter at easthope.ca
Sent: Monday, November 14, 2016 12:18 PM
To: oberon at lists.inf.ethz.ch
Subject: [Oberon] Tidyness of iteration.

(* Pre-2013. *)
PROCEDURE LOOPiteration();
BEGIN
Texts.OpenReader(R, t, 0);
LOOP
Texts.Read(R, ch);
IF R.eot THEN EXIT ELSE (* Process ch *) END
END
END LOOPinteration.

Project Oberon 2013, Page 5.
"2. The LOOP and EXIT statements (repetitions with multiple exit points)
have been discarded."

(* Using REPEAT, R.eot must be checked twice in each iteration. *)
PROCEDURE REPEATiteration();
BEGIN
Texts.OpenReader(R, t, 0);
REPEAT
IF ~R.eot THEN Texts.Read(R, ch); (* Process ch *) END
UNTIL R.eot
END REPEATinteration.

(* Using WHILE, Texts.Read is duplicated. *)
PROCEDURE WHILEiteration();
BEGIN
Texts.OpenReader(R, t, 0);
Texts.Read(R, ch);
WHILE ~R.eot
(* Process ch *);
Texts.Read(R, ch)
END
END WHILEinteration.

Can the REPEAT example or the WHILE example be simplified further?
(One must wonder about discarding REPEAT and WHILE and retaining LOOP with
strictly one EXIT.)

Thanks,            ... Lyall E.


-- 

123456789 123456789 123456789 123456789 123456789 123456789 123456789
Tel: +1 360 639 0202                      Pender Is.: +1 250 629 3757
http://easthope.ca/Peter.html              Bcc: peter at easthope. ca

--
Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related systems
https://lists.inf.ethz.ch/mailman/listinfo/oberon


---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus

--
Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related systems
https://lists.inf.ethz.ch/mailman/listinfo/oberon 


---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus



More information about the Oberon mailing list