Şu sıralarda Aralıklar bölümünü yazmaya devam ediyorum. Örnek olarak kullandığım Fibonacci serisi hoşuma gitti; paylaşmak istedim:
import std.stdio;
import std.range;
struct FibonacciSerisi
{
ulong baştaki = 0;
ulong sonraki = 1;
static immutable bool empty = false;
@property ulong front() const
{
return baştaki;
}
void popFront()
{
ulong ikiSonraki = baştaki + sonraki;
baştaki = sonraki;
sonraki = ikiSonraki;
}
}
void main()
{
writeln(take(FibonacciSerisi(), 10));
}
empty, front, ve popFront() üyelerine sahip olmak bir türü InputRange yapmaya yetiyor. Sonsuz aralıklarda 'empty'nin işlev olması da gerekmiyor; değeri false olan static bir üye de yetiyor.
take, kendisine verilen aralıktan belirtilen sayıda eleman çeker. take'i kullanmasaydım şu hiç sonlanmazdı:
writeln(FibonacciSerisi());
Ali
Not: FibonacciSerisi, ulong.max'tan büyük değerlere gelindiğinde yanlış çalışır ama olsun. :)
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]