On 03/12/2011 01:33 AM, Russel Winder wrote:
> On Fri, 2011-03-11 at 18:46 -0500, Jesse Phillips wrote:
>> Without testing: foreach (f; take(recurrence!("a[n-1] + a[n-2]")(0UL, 1UL), 50))
>>
>> teo Wrote:
>>
>>> Just curious: How can I get ulong here?
>>>
>>> foreach (f; take(recurrence!("a[n-1] + a[n-2]")(0, 1), 50))
>>> {
>>>    writeln(f);
>>> }
>>
>
> Interestingly, or not, the code:
>
> long declarative ( immutable long n ) {
>    return take ( recurrence ! ( "a[n-1] + a[n-2]" ) ( 0L , 1L ) , n ) ;
> }

take returns a lazy range which can't be returned as a single long.

Reading your other post, I think this may be what you wanted to see:

import std.range;
import std.algorithm;

auto declarative(immutable long n)
{
  return take(recurrence!("a[n-1] + a[n-2]")(0L, 1L), n);
}

void main()
{
    long[] data = [ 0, 1, 1, 2, 3, 5, 8 ];

    foreach (n; 0 .. data.length) {
        assert(equal(declarative(n), data[0..n]));
    }
}

Ali

Reply via email to