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: 103376,4b06f8f15f01a568 X-Google-Attributes: gid103376,public X-Google-Thread: 1108a1,9a0ff0bffdf63657 X-Google-Attributes: gid1108a1,public X-Google-Thread: f43e6,9a0ff0bffdf63657 X-Google-Attributes: gidf43e6,public From: dewarr@my-dejanews.com Subject: Re: Software landmines (loops) Date: 1998/09/01 Message-ID: <6sgn8l$7aq$1@nnrp1.dejanews.com>#1/1 X-Deja-AN: 386739744 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> X-Http-Proxy: 1.0 x6.dejanews.com:80 (Squid/1.1.22) for client 205.232.38.14 Organization: Deja News - The Leader in Internet Discussion X-Article-Creation-Date: Tue Sep 01 11:53:57 1998 GMT Newsgroups: comp.lang.eiffel,comp.object,comp.software-eng,comp.lang.ada X-Http-User-Agent: Mozilla/2.02 (OS/2; I) Date: 1998-09-01T00:00:00+00:00 List-Id: In article , Matthew Heaney wrote: > 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). > > Well it is not necessarily clear that this restatement is less efficient. A compiler could manage to optimize the awkward flag version back to the simple version with exits. Interestingly few compilers do this optimization. A similar case is optimizing an awkward case statement of a finite state machine back to the simple and efficient version with gotos. Given how common serious goto-allergy is, especially in the US, and seeing how many people are willing to contort their code to avoid gotos, these are optimizations that are probably worthwhile including in modern compilers for this class of languages. Robert Dewar -----== Posted via Deja News, The Leader in Internet Discussion ==----- http://www.dejanews.com/rg_mkgrp.xp Create Your Own Free Member Forum