Re: Reversing a string
On Friday, 11 January 2019 at 19:16:05 UTC, AlCaponeJr wrote: On Friday, 11 January 2019 at 11:15:05 UTC, Mike James wrote: Check out the origin :-) https://forum.dlang.org/thread/hl8345$2b1q$1...@digitalmars.com?page=1 Indeed a terrible name, please don't tell me this was chosen by vote. By the way currently is there any vote system for naming these things? Al. No. There are zero plans to break a ton of code by changing the name of a symbol in the standard library. It's more likely that someone comes along with a new general purpose library which hasn't seen much usage and thus can define slightly better names.
Re: Reversing a string
On Friday, 11 January 2019 at 11:15:05 UTC, Mike James wrote: Check out the origin :-) https://forum.dlang.org/thread/hl8345$2b1q$1...@digitalmars.com?page=1 Indeed a terrible name, please don't tell me this was chosen by vote. By the way currently is there any vote system for naming these things? Al.
Re: Reversing a string
On 1/11/19 1:25 PM, 0xEAB wrote: On Friday, 11 January 2019 at 13:51:04 UTC, JN wrote: On Friday, 11 January 2019 at 11:15:05 UTC, Mike James wrote: Check out the origin :-) https://forum.dlang.org/thread/hl8345$2b1q$1...@digitalmars.com?page=1 I guess something like iterReverse, reverseIter, backIterator would be too simple... Of course. I would protrude from all other functions with their weird names then. Just kidding. Although... I have to admit it happened more than just once that I thought, "oh... another function that's named exactly different from what I'd have gone with." Part of the problem is that arr.reverse already was defined a long time ago. The thing about retro, is that even though it's not what I would think of for this operation, I have never forgotten the name since ;) -Steve
Re: Reversing a string
On Friday, 11 January 2019 at 13:51:04 UTC, JN wrote: On Friday, 11 January 2019 at 11:15:05 UTC, Mike James wrote: Check out the origin :-) https://forum.dlang.org/thread/hl8345$2b1q$1...@digitalmars.com?page=1 I guess something like iterReverse, reverseIter, backIterator would be too simple... Of course. I would protrude from all other functions with their weird names then. Just kidding. Although... I have to admit it happened more than just once that I thought, "oh... another function that's named exactly different from what I'd have gone with."
Re: Reversing a string
On Friday, 11 January 2019 at 13:51:04 UTC, JN wrote: I guess something like iterReverse, reverseIter, backIterator would be too simple... or foreach_reverse, which never actually was removed! lol
Re: Reversing a string
On Friday, 11 January 2019 at 11:15:05 UTC, Mike James wrote: Check out the origin :-) https://forum.dlang.org/thread/hl8345$2b1q$1...@digitalmars.com?page=1 I guess something like iterReverse, reverseIter, backIterator would be too simple...
Re: Reversing a string
On Friday, 11 January 2019 at 11:15:05 UTC, Mike James wrote: On Friday, 11 January 2019 at 09:41:30 UTC, bauss wrote: On Friday, 11 January 2019 at 08:25:41 UTC, Seb wrote: On Friday, 11 January 2019 at 08:05:39 UTC, AndreasDavour wrote: Hi. I've just started to learn some D, so maybe this question is extremely stupid, but please bear with me. [...] Use .retro - it is also lazy and won't allocate: https://run.dlang.io/is/A6bjrC What a terrible name. Check out the origin :-) https://forum.dlang.org/thread/hl8345$2b1q$1...@digitalmars.com?page=1 -=mike=- Look at that. Incidentally, I kind of like "foreach(i; 99 .. 0 : -1)".
Re: Reversing a string
On Friday, 11 January 2019 at 11:15:05 UTC, Mike James wrote: On Friday, 11 January 2019 at 09:41:30 UTC, bauss wrote: On Friday, 11 January 2019 at 08:25:41 UTC, Seb wrote: On Friday, 11 January 2019 at 08:05:39 UTC, AndreasDavour wrote: Hi. I've just started to learn some D, so maybe this question is extremely stupid, but please bear with me. [...] Use .retro - it is also lazy and won't allocate: https://run.dlang.io/is/A6bjrC What a terrible name. Check out the origin :-) https://forum.dlang.org/thread/hl8345$2b1q$1...@digitalmars.com?page=1 -=mike=- I wish I could live my life peacefully, but apparently not.
Re: Reversing a string
On Friday, 11 January 2019 at 09:41:30 UTC, bauss wrote: On Friday, 11 January 2019 at 08:25:41 UTC, Seb wrote: On Friday, 11 January 2019 at 08:05:39 UTC, AndreasDavour wrote: Hi. I've just started to learn some D, so maybe this question is extremely stupid, but please bear with me. [...] Use .retro - it is also lazy and won't allocate: https://run.dlang.io/is/A6bjrC What a terrible name. Check out the origin :-) https://forum.dlang.org/thread/hl8345$2b1q$1...@digitalmars.com?page=1 -=mike=-
Re: Reversing a string
On Friday, 11 January 2019 at 09:41:30 UTC, bauss wrote: On Friday, 11 January 2019 at 08:25:41 UTC, Seb wrote: On Friday, 11 January 2019 at 08:05:39 UTC, AndreasDavour wrote: Hi. I've just started to learn some D, so maybe this question is extremely stupid, but please bear with me. [...] Use .retro - it is also lazy and won't allocate: https://run.dlang.io/is/A6bjrC What a terrible name. Well, it was not the first one I would have searched for, no. Good to know it exists as well, though. Thanks!
Re: Reversing a string
On Friday, 11 January 2019 at 08:25:41 UTC, Seb wrote: On Friday, 11 January 2019 at 08:05:39 UTC, AndreasDavour wrote: Hi. I've just started to learn some D, so maybe this question is extremely stupid, but please bear with me. [...] Use .retro - it is also lazy and won't allocate: https://run.dlang.io/is/A6bjrC What a terrible name.
Re: Reversing a string
On Friday, 11 January 2019 at 08:45:12 UTC, JN wrote: On Friday, 11 January 2019 at 08:15:01 UTC, rikki cattermole wrote: Note the immutable, it means you cannot modify individual values. Which is a problem for reverse because it modifies in place. The error message is kind of unfortunate. This is a simple usecase and the error message is undecipherable already. It'd be cool if the compiler could try to strip immutability, and if the type matches then, throw an error something like "Cannot pass immutable char[] to reverse, did you mean char[]?". That would help a lot, as I got "rikki cattermole"'s answer at once, when my eyes were brought to the "immutable" part. I come from the lisp world, so I'm kind of familiar with the idea of copying and/or modifying in place to limit consing. I guess I should I have realised this would be a perfect example of that kind of situation.
Re: Reversing a string
On Friday, 11 January 2019 at 08:15:01 UTC, rikki cattermole wrote: Note the immutable, it means you cannot modify individual values. Which is a problem for reverse because it modifies in place. The error message is kind of unfortunate. This is a simple usecase and the error message is undecipherable already. It'd be cool if the compiler could try to strip immutability, and if the type matches then, throw an error something like "Cannot pass immutable char[] to reverse, did you mean char[]?".
Re: Reversing a string
On Friday, 11 January 2019 at 08:05:39 UTC, AndreasDavour wrote: Hi. I've just started to learn some D, so maybe this question is extremely stupid, but please bear with me. [...] Use .retro - it is also lazy and won't allocate: https://run.dlang.io/is/A6bjrC
Re: Reversing a string
So strings in D are Unicode. This is both a great thing and a horrible thing. To reverse a Unicode string correctly you need to take into account BiDi and graphemes, in other words it gets rather complex. However I suspect that this isn't what you want. Now a (w/d)string is defined as: alias string = immutable(char)[]; alias wstring = immutable(wchar)[]; alias dstring = immutable(dchar)[]; Note the immutable, it means you cannot modify individual values. Which is a problem for reverse because it modifies in place. Which means: writeln("Hello D".reverse); Won't work, but: writeln("Hello D".dup.reverse); Will. A simple duplication (char[]) makes it work. Finally, arrays in D are absolutely brilliant. They are what we call slices. A slice is a pointer + a length. That is it. Hence they cannot be reversed in place. Of course this is great for interacting with e.g. C, since its just a matter of slicing any data back to get your bounds checking ext.