make (a < b < c) illegal?

Andrei Alexandrescu (See Website For Email) SeeWebsiteForEmail at erdani.org
Wed Feb 7 18:58:26 PST 2007


Kirk McDonald wrote:
> 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

Obligatory comment: it would return true also if it were interpreted as 
(a < b) == (c < d) or as ((a < b) == c) < d. So the example is unclear.

:o)


Andrei



More information about the Digitalmars-d mailing list