make (a < b < c) illegal?

Kirk McDonald kirklin.mcdonald at gmail.com
Wed Feb 7 18:37:41 PST 2007


Andrei Alexandrescu (See Website For Email) wrote:
> Derek Parnell wrote:
>> On Wed, 07 Feb 2007 16:55:15 -0800, Walter Bright wrote:
>>
>>> Right now, in D (as well as C and C++), when you see the expression:
>>>
>>>     if (a < b < c)
>>>
>>> what is your first thought? Mine is that it was written by a newbie 
>>> who didn't realize that (a < b) returns true or false, and that it 
>>> does NOT mean ((a < b) && (b < c)). The odds approach certainty that 
>>> this is a logic error in the code, and even if it was intentional, it 
>>> raises such a red flag that it shouldn't be used anyway.
>>>
>>> Andrei has proposed (and I agreed) that this should be done away with 
>>> in the language, i.e. comparison operators should no longer be 
>>> associative.   It's a simple change to the grammar. If one really did 
>>> want to write such code, it could be done with parentheses:
>>>
>>>     if ((a < b) < c)
>>>
>>> to get the original behavior. At least, that looks intentional.
>>>
>>> I don't think this will break existing code that isn't already broken.
>>
>> First thought: Yes, your proposed change makes sense.
>>
>> Second thought: Why not make it do what the coder is wanting it to do?
>>    Namely, make the idiom:
>>
>>      expression1 relopA expression2 relopB expression3
>>
>>    translate as
>>
>>      ( auto temp = expression2,
>>       (expression1 relopA temp) && (temp relopB expression3) )
> 
> What's the intended meaning of:
> 
> a < b == c < d
> 
> ?
> 
> 
> Andrei

It's worth pointing out that Python handles these operations just like 
Derek suggests. Take the following from Python's interactive mode:

 >>> a=1
 >>> b=2
 >>> c=2
 >>> d=3
 >>> a<b==c<d
True

-- 
Kirk McDonald
Pyd: Wrapping Python with D
http://pyd.dsource.org



More information about the Digitalmars-d mailing list