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=0.7 required=5.0 tests=BAYES_00,INVALID_MSGID, PDS_OTHER_BAD_TLD autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: fac41,9a0ff0bffdf63657 X-Google-Attributes: gidfac41,public X-Google-Thread: 1108a1,9a0ff0bffdf63657 X-Google-Attributes: gid1108a1,public X-Google-Thread: 103376,4b06f8f15f01a568 X-Google-Attributes: gid103376,public X-Google-Thread: f43e6,9a0ff0bffdf63657 X-Google-Attributes: gidf43e6,public From: Matthew Heaney Subject: Re: Software landmines (loops) Date: 1998/09/01 Message-ID: #1/1 X-Deja-AN: 386655717 Sender: matt@mheaney.ni.net References: <902934874.2099.0.nnrp-10.c246a717@news.demon.co.uk> <6r1glm$bvh$1@nnrp1.dejanews.com> <6r9f8h$jtm$1@nnrp1.dejanews.com> <6renh8$ga7$1@nnrp1.dejanews.com> <6rf59b$2ud$1@nnrp1.dejanews.com> <6rfra4$rul$1@nnrp1.dejanews.com> <35DBDD24.D003404D@calfp.co.uk> <6sbuod$fra$1@hirame.wwa.com> <35f51e53.48044143@ <904556531.666222@miso.it.uq.edu.au> <35EAEC47.164424A7@s054.aone.net.au> NNTP-Posting-Date: Mon, 31 Aug 1998 20:12:50 PDT Newsgroups: comp.lang.eiffel,comp.object,comp.software-eng,comp.lang.ada Date: 1998-09-01T00:00:00+00:00 List-Id: Loryn Jenkins writes: > How is this more complicated? > > equal (l,r: LIST): BOOLEAN is > require > l.count = r.count > do > Result := l.first /= r.first > if Result then > from > l.start; r.start > until > not Result or l.off > loop > Result := l.item /= r.item > l.forth; r.forth > end > end > end There are a few things I don't like about this: 1) You have to test a flag every iteration of the loop. That adds (a marginal amount of) inefficiency. 2) The loop predicate has 4 possible values. The original example had only 2. 3) There's more nesting. So yes, I feel the above implementation is more complex than the original implementation that used muliple returns. > Sorry for the language change ... it's the one I'm familiar with. AOK, I understood it OK. (I also read the 1st ed of Bertrand's book.) > By the way, I'm not sure whether it's a problem in your Ada code, but my > Eiffel code could fail if r has greater or fewer items than l. Hence the > precondition. That's what the check L.Top /= R.Top means: if the number of items is different, then you know immediately that the stacks can't be equal. When you reach the loop, you know the stack depths are the same. The way I look at this problem, is that it's like searching for a specific house on an unfamiliar block. As you're driving, when you find the house, you stop immediately and declare success. You don't have to drive to the end of the block, and then say where the house was. Likewise for the example I provided. Once you determine that the stacks are unequal, you quit and go home. You don't need go all the way to the end of the subprogram to declare victory (unless of course the stacks happen to really be equal).