May 17, 2010

Bilmeyenler için: kabaca, şablonlardan yararlanan derleme zamanı işlemlerine "meta programlama" deniyor.

Meşhur faktöriyelin derleme zamanında şablonlarla hesaplanması:

import std.stdio;

// Genel tanımı: n! = n * (n - 1)!
ulong faktöriyel(ulong değer)()
{
   return değer * faktöriyel!(değer - 1UL)();
}

// Özyinelemeyi kırmak için 0 için özellemesi
ulong faktöriyel(ulong değer : 0)()
{
   return 1;
}

void main()
{
   writefln("ulong.max: % 22s", ulong.max);
   writefln("           % 22s", faktöriyel!20());
}

Pek de iyi gözle bakılmayan özyinelemeyi kullanıyor ama idare edin... :D Zaten çok büyük sayılar kullanamıyoruz, çünkü ulong türü en fazla 20!'nin sonucunu tutabiliyor; 21! taşıyor ve ondan sonrasının değerleri yanlış oluyor.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]