Related articles |
---|
[5 earlier articles] |
Re: Overloaded logic operators mike@mike-austin.com (Mike Austin) (2008-11-25) |
Re: Overloaded logic operators mike@mike-austin.com (Mike Austin) (2008-11-25) |
Re: Overloaded logic operators mike@mike-austin.com (Mike Austin) (2008-11-25) |
Re: Overloaded logic operators lkrupp@pssw.com (Louis Krupp) (2008-11-25) |
Re: Overloaded logic operators mailbox@dmitry-kazakov.de (Dmitry A. Kazakov) (2008-11-25) |
Re: Overloaded logic operators m.helvensteijn@gmail.com (2008-11-25) |
Re: Overloaded logic operators bc@freeuk.com (Bartc) (2008-11-25) |
Re: Overloaded logic operators cdodd@acm.org (Chris Dodd) (2008-11-25) |
Re: Overloaded logic operators torbenm@pc-003.diku.dk (2008-11-26) |
Re: Overloaded logic operators fswarbrick@gmail.com (Frank Swarbrick) (2008-11-27) |
Re: Overloaded logic operators dot@dotat.at (Tony Finch) (2008-12-01) |
Re: Overloaded logic operators alexc@TheWorld.com (Alex Colvin) (2008-12-03) |
Re: Overloaded logic operators haberg_20080406@math.su.se (Hans Aberg) (2008-12-04) |
From: | "Bartc" <bc@freeuk.com> |
Newsgroups: | comp.compilers |
Date: | Tue, 25 Nov 2008 23:08:08 GMT |
Organization: | Compilers Central |
References: | 08-11-110 08-11-116 08-11-125 |
Keywords: | syntax, design |
Posted-Date: | 27 Nov 2008 11:58:53 EST |
m.helvensteijn@gmail.com> wrote
>> (Being able to write if a<b<c is neat though and I've just added
>> that to my language, with about 5 lines of code; it just converts to
>> if (a<b) and (b<c).)
>
> Yes, chained comparison is neat. But watch out. If someone wrote: (a <
> b() < c), he would expect b() to only be evaluated once, not twice.
> This makes a big difference if b() has side-effects. Also, the syntax
> can be extended to mixed comparison operators. For example: (a < b = c
> < d).
>
> Did you catch all that in 5 lines of code? Then I admire your code
> modularity. :-)
No; someone mentioned about evaluating b twice, and I fixed it for when b is
an assignment:
a < (b:=x) < c
becomes: 'a < (b:=x) and b < c'. It just means that the user has to create
an explicit copy by writing (b:=x) instead of just x, when x has side
effects.
That took another 5 or 6 lines. This is all just syntax after all.
And yes the original 5 lines did deal with all six relational operators, and
could cope (by an accident of recursion) with long chains such as a<b<c<d<e.
--
Bartc
Return to the
comp.compilers page.
Search the
comp.compilers archives again.