Path: utzoo!utgpu!tmsoft!mason From: mason@tmsoft.UUCP (Dave Mason) Newsgroups: comp.lang.misc Subject: Re: Loops Message-ID: <294@tmsoft.UUCP> Date: 28 Mar 88 04:52:36 GMT References: <2827@enea.se> <1557@pasteur.Berkeley.Edu> <2773@mmintl.UUCP> Reply-To: mason@tmsoft.UUCP (Dave Mason) Followup-To: comp.lang.misc Organization: TM Software Associates, Toronto / Ryerson Polytechnical Institute Lines: 72 In article <2773@mmintl.UUCP> franka@mmintl.UUCP (Frank Adams) writes: > >The more I program, the more convinced I become that the 'while' loop is a >mistake. It just doesn't match the semantics of too many real loops. >... >The key points are: > >(1) Exit from any point in the loop. >(2) Multiple exits. >(3) Code can be associated with any exit point. > In a language I designed for my students to implement in my compiler course loops look like: do ... while expr ... od where the while can go anywhere & there can be any number of them (or until's which are similar but with opposite logic). This leads to Pascal style while & repeat loops: do while expr ... od do ... until expr od as well as the more flexible forms. The do keyword can be followed by 1 or more 'for' clauses, which are stepped in parallel: int a[0..29] ... do for i in 1..20 for ap in a ... while i!=ap ... od equivalent to the C: int a[30]; ... {int i,*ap; for (i=1,ap=a;i<=20 && ap<&a[sizeof(a)/sizeof(int)];++i,++ap) { ... if (i!=*ap) break; ... }} Notes: 1) loop control variables have a scope of the loop 2) loop control variables traversing an array (or list or other linked structure) are aliases for the current element 3) all the efficiency of C pointer arithmetic 4) all the safety of Pascal subscript calculation (and more if we were to make the aliased array be not directly usable in the loop scope, but I want them to be able to implement a reasonable subset in a semester :-) 5) controlled break out of outer loops (continue, break) (do, while, until, continue, break all have optional labels) From the sample programs I've written in this language, this seems like a very reasonable and natural loop structure. (BTW, Frank's idea already exists in at least Concurrent Euclid, Turing: loop ... exit when a<>b ... end loop ) ../Dave