Is there a way to take a bounded rage from a infinite forward range?

Given the Fibonacci sequence:

        auto fib = recurrence!("a[n-1] + a[n-2]")(1, 1);

I can take the first n elements:

        take(fib, 10);

But say I want all positive elements below 50000 in value (there are eight such values [2, 8, 34, 144, 610, 2584, 10946, 46368]), how would I "take" them? Of course I could filter the range, leaving only positive values, and then take(fib, 8). But what if I didn't know there were 8, how could I take them from there filtered range?

Currently I do this:

        foreach(e; fib)
        {
            if (e >= val) break;
            // so something with e
        }

or

        while((e = fib.front()) < n)
        {
            // do something with e
            fib.popFront();
        }

Is there a better way?

Reply via email to