From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII X-Google-Thread: fac41,9a0ff0bffdf63657 X-Google-Attributes: gidfac41,public X-Google-Thread: 1108a1,9a0ff0bffdf63657 X-Google-Attributes: gid1108a1,public X-Google-Thread: f43e6,9a0ff0bffdf63657 X-Google-Attributes: gidf43e6,public X-Google-Thread: 103376,4b06f8f15f01a568 X-Google-Attributes: gid103376,public From: "Jean-Pierre Rosen" Subject: Re: Why C++ is successful Date: 1998/08/17 Message-ID: <6r98hp$omh$1@platane.wanadoo.fr>#1/1 X-Deja-AN: 381936815 Content-Transfer-Encoding: 8bit References: <902934874.2099.0.nnrp-10.c246a717@news.demon.co.uk> <6r1e1a$mj$1@platane.wanadoo.fr> <6r631r$5ph$1@platane.wanadoo.fr> Content-Type: text/plain; charset="iso-8859-1" X-MimeOLE: Produced By Microsoft MimeOLE V4.72.2106.4 Organization: Adalog Mime-Version: 1.0 Newsgroups: comp.lang.eiffel,comp.object,comp.software-eng,comp.lang.ada Date: 1998-08-17T00:00:00+00:00 List-Id: Robert Dewar a �crit dans le message ... >JPR says > ><"exit outer" at any place where I discover that the array is sorted. >>> > >Kindly then, please do so, we know the principles, the point is the example. >You posted a program that was syntactically incorrect, and also contained >a fundamental semantic error. It is not so easy asyou think to avoid the >flag here, please try -- don't just say you can do it without proving it! OK, I confess I responded a bit hastilly (as proven by the obvious syntax error). I focused on the case when the goto was executed, and forgot the other one... Now, just for fun, I'll give it a try anyway. Well, the original was: <> for J in 1 .. N - 1 loop if D (J) > D (J + 1) then Swap (D(J), D(J + 1)); goto Sort; end if; Obviously, we need to terminate the algorithm if we go to the end of the loop. This woud translate as: Outer: loop Inner: for J in 1 .. N - 1 loop if D (J) > D (J + 1) then Swap (D(J), D(J + 1)); exit Inner; end if; if J = N-1 then exit Outer; end if; end loop Inner; end loop Outer; but of course, we add a spurious test in the inner loop, and I hate testing for special values of the loop variable (sorry, constant!) in the body of the loop. Actually, what we miss here is an exit from a *block*, but we can use an extra loop to the same effect: Outer: loop Restart : loop for J in 1 .. N - 1 loop if D (J) > D (J + 1) then Swap (D(J), D(J + 1)); exit Restart; end if; end loop; exit Outer; end loop Restart; end loop Outer; OK, you asked me to prove it was feasible, I think I did (unless I missed another obvious point, I'd better be careful now :-). Now, don't tell me it's a lot of baggage for the sake of avoiding a goto, I agree.