April 07, 2011

Ş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. ]