On Tuesday, 25 September 2012 at 13:34:28 UTC, Andrei
Alexandrescu wrote:
On 9/25/12 4:23 AM, Mehrdad wrote:
On Tuesday, 25 September 2012 at 08:21:39 UTC, Mehrdad wrote:
without creating new times
new types**
Ah, better now. Still it would be great to explain it more :o).
Andrei
Haha ok. :) I mean like, essentially, these need to work:
assert(is(typeof(foo.stride(1)) ==
typeof(foo.stride(2).stride(3))));
assert(is(typeof(foo.drop(1)) == typeof(foo.drop(2).drop(3))));
assert(is(typeof(foo.take(1)) == typeof(foo.take(2).take(3))));
otherwise recursion with these ranges is impossible.
The FFT example took the odd- and even-indexed numbers with
stride(), but it couldn't recursively do this because the type
system prevented it from doing so.
So I was forced to copy the array unnecessarily every time.
Also, foo should be implicitly convertible to
typeof(foo.stride(1)), which also makes recursion easier.