digitalmars.D - RFE: Trinary comparison operators
- Alex Vincent (15/15) Oct 13 2004 As a programmer, one of the tests I end up doing more often than I want
- Derek Parnell (7/28) Oct 13 2004 Could you do ...
- Stewart Gordon (6/9) Oct 14 2004 What would that achieve over
- Derek (9/22) Oct 14 2004 Well I thought *that* would've been obvious - 4 keystrokes! Plus it look...
- Sjoerd van Leent (18/44) Oct 14 2004 How would you like to define a trinary operator. Since the BCL notation
- Martin (15/30) Oct 14 2004 I am in for it. Good idea.
-
Stewart Gordon
(14/17)
Oct 14 2004
- Sebastian Beschke (4/8) Oct 14 2004 I'm for it only if it wouldn't make lexing and parsing harder. I'd
- =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= (5/9) Oct 14 2004 I thought you meant the "starship operator" <=> that Perl has.
- Niall FitzGibbon (12/16) Oct 15 2004 Instead of creating ambiguity for the < and > operators, how about a new...
As a programmer, one of the tests I end up doing more often than I want to is: if ((a < b) && (b < c)) { /* ... */ } It would be exceptionally nice if D would support an abbreviation of that, similar to what we learned in mathematics classes: if (a < b < c) { /* ... */ } Likewise, I'd want to do: if (a <= b < c) { /* ... */ } if (a < b <= c) { /* ... */ } if (a <= b <= c) { /* ... */ } I would not particularly care to see this sort of functionality implemented in other operators (for instance, a > b > c). This simple test, to check that b is between two values, is fairly straightforward. I'm just wondering if D can add support for this specific type of operation.
Oct 13 2004
On Wed, 13 Oct 2004 20:25:29 -0700, Alex Vincent wrote:As a programmer, one of the tests I end up doing more often than I want to is: if ((a < b) && (b < c)) { /* ... */ } It would be exceptionally nice if D would support an abbreviation of that, similar to what we learned in mathematics classes: if (a < b < c) { /* ... */ } Likewise, I'd want to do: if (a <= b < c) { /* ... */ } if (a < b <= c) { /* ... */ } if (a <= b <= c) { /* ... */ } I would not particularly care to see this sort of functionality implemented in other operators (for instance, a > b > c). This simple test, to check that b is between two values, is fairly straightforward. I'm just wondering if D can add support for this specific type of operation.Could you do ... if ( a < b ? b < c : 0 ) { /* ... */ } -- Derek Melbourne, Australia 14/10/2004 2:26:12 PM
Oct 13 2004
Derek Parnell wrote: <snip>Could you do ... if ( a < b ? b < c : 0 ) { /* ... */ }What would that achieve over if ((a < b) && (b < c)) { /* ... */ } ? Stewart.
Oct 14 2004
On Thu, 14 Oct 2004 11:24:37 +0100, Stewart Gordon wrote:Derek Parnell wrote: <snip>Well I thought *that* would've been obvious - 4 keystrokes! Plus it looks more obscure so it must have been coded by a real guru ;-) I later sat back and tried to use a mixin to implement this but I quickly ran into problems. There is something deep about mixins that I don't grok yet :-( -- Derek Melbourne, AustraliaCould you do ... if ( a < b ? b < c : 0 ) { /* ... */ }What would that achieve over if ((a < b) && (b < c)) { /* ... */ } ? Stewart.
Oct 14 2004
Derek wrote:On Thu, 14 Oct 2004 11:24:37 +0100, Stewart Gordon wrote:How would you like to define a trinary operator. Since the BCL notation says that operator "<" always have to return a bit value (1 or 0). If you write something like the following: a < b < c It would legally evaluate to a < b (which returns a 1 or 0) and then b < c (which goes wrong all the way). b : c <=> a This would be easier to implement I think. It uses an operator that is currently not defined and, in pseudo code says: is b lesser than c and higher than a? Also other options could be done: b : a >=< b b : b <> a b : a >< b This would solve the problem I think... Regards, SjoerdDerek Parnell wrote: <snip>Well I thought *that* would've been obvious - 4 keystrokes! Plus it looks more obscure so it must have been coded by a real guru ;-) I later sat back and tried to use a mixin to implement this but I quickly ran into problems. There is something deep about mixins that I don't grok yet :-(Could you do ... if ( a < b ? b < c : 0 ) { /* ... */ }What would that achieve over if ((a < b) && (b < c)) { /* ... */ } ? Stewart.
Oct 14 2004
I am in for it. Good idea. I think that right now a<b<c means (a<b)<c what means (c>0 && a>=b) || (c>1 && a<b) so a<b<c = (a<b)<c but it is used in very rare cases, so why not a<b<c = a<b && b<c so checking if a is in 6..10 would be if(6<=a<10) instead of if(a>=7 && a<10) Easier to read and code. D is for making programming easier and faster, I think this change serves this goal. Martin In article <ckkrk3$1agd$1 digitaldaemon.com>, Alex Vincent says...As a programmer, one of the tests I end up doing more often than I want to is: if ((a < b) && (b < c)) { /* ... */ } It would be exceptionally nice if D would support an abbreviation of that, similar to what we learned in mathematics classes: if (a < b < c) { /* ... */ } Likewise, I'd want to do: if (a <= b < c) { /* ... */ } if (a < b <= c) { /* ... */ } if (a <= b <= c) { /* ... */ } I would not particularly care to see this sort of functionality implemented in other operators (for instance, a > b > c). This simple test, to check that b is between two values, is fairly straightforward. I'm just wondering if D can add support for this specific type of operation.
Oct 14 2004
Martin wrote:I am in for it. Good idea. I think that right now a<b<c means (a<b)<c what means (c>0 && a>=b) || (c>1 && a<b)<snip> Actually, it means (a < b) ? (0 < c) : (1 < c) They look equivalent, but they're not. (a < b) < c evaluates each of a, b and c exactly once regardless of the outcome. Your interpretation evaluates the subexpressions different numbers of times: (c>0 && a>=b) || ( c>1 && a<b) eval a eval b eval c F F T F F F F 0 0 2 T T T T F F F 1 1 1 T T T T T F F 1 1 1 F F F F F F T 0 0 2 T F F F F F T 1 1 2 T F F T T T T 2 2 2 Stewart.
Oct 14 2004
Alex Vincent wrote:As a programmer, one of the tests I end up doing more often than I want to is: if ((a < b) && (b < c)) { /* ... */ }I'm for it only if it wouldn't make lexing and parsing harder. I'd rather type a few more characters than have a slow compiler. Sebastian
Oct 14 2004
Alex Vincent wrote:It would be exceptionally nice if D would support an abbreviation of that, similar to what we learned in mathematics classes: if (a < b < c) { /* ... */ }I thought you meant the "starship operator" <=> that Perl has. It returns -1, 0, or +1 depending on if they are <, == or > Handy for writing sorting functions ? --anders
Oct 14 2004
Alex Vincent wrote:As a programmer, one of the tests I end up doing more often than I want to is: if ((a < b) && (b < c)) { /* ... */ }Instead of creating ambiguity for the < and > operators, how about a new set of "bounding" operators that behaves similarly to the ?: operators? This is an operation that graphical applications have to perform many times per frame for clipping, and I think it would be good to have it simplified to the form of a basic operator. How about something like: Maybe this would be too ambiguous for the parser though?
Oct 15 2004