On 05/13/2010 01:46 AM, bearophile wrote:
The meaning of that little Haskell program is simple:
fibonacci is a symbol, it can be seen as a lazy generator that yields a list of numbers.
The first and second are 1 (the colon stands for list item concatenation), to it
concatenates the zipping between the result of the generator and another "copy"
of the same generator minus the first item.
It is stored as a list, and is in effect memoized. That's why it's a
viable solution for haskell, and sucks in python.
You can, naturally, create the same in D. It will be more verbose, though.
...So I did.
struct Fibs {
immutable(int)[] m = [0, 1];
int front() { return m[$-1]; }
void popFront() {
m ~= m[$-2] + m[$-1];
}
enum bool empty = false;
int opIndex(size_t a) {
a += 1;
while (a >= m.length) popFront;
return m[a];
}
}
Fibs fibonacchi;
That should be about the same. :)