D - Slice notation - slicing to end, or from start
- Matthew Wilson (10/10) Oct 10 2003 Is there any chance we could amend the slice notation such that
- Daniel Yokomiso (45/55) Oct 11 2003 If
- Matthew Wilson (7/66) Oct 11 2003 Sounds interesting. I think this would be worth exploring, when Walter h...
- Ben Hinkle (11/21) Oct 12 2003 MATLAB uses the keyword "end" for this. Some example translated to D arr...
-
Carlos Santander B.
(27/27)
Oct 12 2003
"Matthew Wilson"
wrote in message
Is there any chance we could amend the slice notation such that ar[2 .. ] would be interpreted as ar[2 .. ar.length] ar[ .. 10] would be interpreted as ar[0 .. 10] ar[ .. ] would be interpreted as ar[0 .. ar.length] (The last one would be pretty useless, of course). It's just syntactic sugar, I grant you, but it would be nice nonetheless. If there's no serious parsing issue, can we add this to the list of nice features. Of course, the form t[1 .. ] might cause some problems with the overloaded slice operator for UDTs, ...
Oct 10 2003
"Matthew Wilson" <matthew stlsoft.org> escreveu na mensagem news:bm836b$2pr4$1 digitaldaemon.com...Is there any chance we could amend the slice notation such that ar[2 .. ] would be interpreted as ar[2 .. ar.length] ar[ .. 10] would be interpreted as ar[0 .. 10] ar[ .. ] would be interpreted as ar[0 .. ar.length] (The last one would be pretty useless, of course). It's just syntactic sugar, I grant you, but it would be nice nonetheless.Ifthere's no serious parsing issue, can we add this to the list of nice features. Of course, the form t[1 .. ] might cause some problems with the overloaded slice operator for UDTs, ...In Haskell they have a Enum type-class and the .. operator is a syntatic sugar for certain operations, so they can write: [1 .. 10] -> enumFromTo 1 10 [1 .. ] -> enumFrom 1 [1, 3 .. 9] -> enumFromThenTo 1 3 9 [1, 3 .. ] -> enumFromThen 1 3 The "then" part is used to define steps. Anyway I think in D we could do similar things and have the .. operator create a templated Range construct: 1 .. 10 -> new instance TRange(int).FromTo(1,10) 1 .. -> new instance TRange(int).From(1) .. 10 -> new instance TRange(int).To(10) and the array semantics would use this range definitions to know which indices it should iterate. So there are three possibilities: FromTo -> use the range bounds From -> use the range "from" bound and the array.length as upper bound To -> use the range "to" bound and 0 as lower bound The nice thing about this notation is that someone can create a UDT that uses this notation, if it provides a pair of "successor"/"predecessor" methods (or succ/pred if you want to be economic ;) for the UDT. struct MyValue { int x; MyValue succ() { return {x + 1}; } MyValue pred() { return {x - 1}; } } MyValue a = {1}; MyValue b = {2}; for(MyValue c; a .. b) { printf("%d\r\n", c.x); } The possibilities are endless, but I digress... Best regards, Daniel Yokomiso. "I'll take the red pill, no, blue. AAAHHHHHHHHHHHHHHHH........" - The Matrix meets Monty Python's Holy Grail. --- Outgoing mail is certified Virus Free. Checked by AVG anti-virus system (http://www.grisoft.com). Version: 6.0.524 / Virus Database: 321 - Release Date: 8/10/2003
Oct 11 2003
Sounds interesting. I think this would be worth exploring, when Walter has the time. "Daniel Yokomiso" <daniel_yokomiso yahoo.com.br> wrote in message news:bm9vh6$29u9$1 digitaldaemon.com..."Matthew Wilson" <matthew stlsoft.org> escreveu na mensagem news:bm836b$2pr4$1 digitaldaemon.com...nonetheless.Is there any chance we could amend the slice notation such that ar[2 .. ] would be interpreted as ar[2 .. ar.length] ar[ .. 10] would be interpreted as ar[0 .. 10] ar[ .. ] would be interpreted as ar[0 .. ar.length] (The last one would be pretty useless, of course). It's just syntactic sugar, I grant you, but it would be niceIfoverloadedthere's no serious parsing issue, can we add this to the list of nice features. Of course, the form t[1 .. ] might cause some problems with theconstruct:slice operator for UDTs, ...In Haskell they have a Enum type-class and the .. operator is a syntatic sugar for certain operations, so they can write: [1 .. 10] -> enumFromTo 1 10 [1 .. ] -> enumFrom 1 [1, 3 .. 9] -> enumFromThenTo 1 3 9 [1, 3 .. ] -> enumFromThen 1 3 The "then" part is used to define steps. Anyway I think in D we could do similar things and have the .. operator create a templated Range1 .. 10 -> new instance TRange(int).FromTo(1,10) 1 .. -> new instance TRange(int).From(1) .. 10 -> new instance TRange(int).To(10) and the array semantics would use this range definitions to know which indices it should iterate. So there are three possibilities: FromTo -> use the range bounds From -> use the range "from" bound and the array.length as upper bound To -> use the range "to" bound and 0 as lower bound The nice thing about this notation is that someone can create a UDT that uses this notation, if it provides a pair of "successor"/"predecessor" methods (or succ/pred if you want to be economic ;) for the UDT. struct MyValue { int x; MyValue succ() { return {x + 1}; } MyValue pred() { return {x - 1}; } } MyValue a = {1}; MyValue b = {2}; for(MyValue c; a .. b) { printf("%d\r\n", c.x); } The possibilities are endless, but I digress... Best regards, Daniel Yokomiso. "I'll take the red pill, no, blue. AAAHHHHHHHHHHHHHHHH........" - The Matrix meets Monty Python's Holy Grail. --- Outgoing mail is certified Virus Free. Checked by AVG anti-virus system (http://www.grisoft.com). Version: 6.0.524 / Virus Database: 321 - Release Date: 8/10/2003
Oct 11 2003
MATLAB uses the keyword "end" for this. Some example translated to D array syntax: ar[2 .. end] = 0; ar[2 .. end-1] = 0; ar[end+1] = 0; The last example grows the array by one element and sets it to zero. Since slicing in MATLAB is inclusive "end" would evaluate to ar.length+1. -Ben "Matthew Wilson" <matthew stlsoft.org> wrote in message news:bm836b$2pr4$1 digitaldaemon.com...Is there any chance we could amend the slice notation such that ar[2 .. ] would be interpreted as ar[2 .. ar.length] ar[ .. 10] would be interpreted as ar[0 .. 10] ar[ .. ] would be interpreted as ar[0 .. ar.length] (The last one would be pretty useless, of course). It's just syntactic sugar, I grant you, but it would be nice nonetheless.Ifthere's no serious parsing issue, can we add this to the list of nice features. Of course, the form t[1 .. ] might cause some problems with the overloaded slice operator for UDTs, ...
Oct 12 2003
"Matthew Wilson" <matthew stlsoft.org> wrote in message news:bm836b$2pr4$1 digitaldaemon.com... | Is there any chance we could amend the slice notation such that | | ar[2 .. ] would be interpreted as ar[2 .. ar.length] | ar[ .. 10] would be interpreted as ar[0 .. 10] | ar[ .. ] would be interpreted as ar[0 .. ar.length] | | (The last one would be pretty useless, of course). | | It's just syntactic sugar, I grant you, but it would be nice nonetheless. If | there's no serious parsing issue, can we add this to the list of nice | features. | | Of course, the form t[1 .. ] might cause some problems with the overloaded | slice operator for UDTs, ... | | | | I second this. ————————————————————————— Carlos Santander --- Checked by AVG anti-virus system (http://www.grisoft.com). Version: 6.0.525 / Virus Database: 322 - Release Date: 2003-10-09
Oct 12 2003