Lazy range, extract only Nth element, set range size constraint?
biocyberman via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sun Jul 9 14:51:14 PDT 2017
Following is the code for a more generalized Fibonacci range.
Questions:
1. How do I get only the value of the Nth (i.e. N = 25) element
in an idiomatic way?
2. Can I set constraints in the range so that user gets warning
if he asks for Nth element greater than a limit, say N> 30; or if
the actually range value at N is greater than datatype limit
(e.g. max long)? Maybe this should be done outside of the range,
i.e. do check before accessing the range?
#!/usr/bin/env rdmd
import std.stdio : writeln;
long multifactor = 4;
int elemth = 25;
struct FibonacciRange
{
long first = 1;
long second = 1;
bool empty() const @property
{
// how to stop at n = 30?
return false;
}
void popFront()
{
long tmp = 0;
tmp = first*multifactor + second;
first = second;
second = tmp;
}
long front() const @property
{
return first;
}
}
void main()
{
import std.range : take;
import std.array : array;
FibonacciRange fib;
auto fib10 = take(fib, elemth);
long[] the10Fibs = array(fib10);
}
More information about the Digitalmars-d-learn
mailing list