RSS

Hamming sayıları ve tembelliğin erdemleri: C# vs. Haskell

18 Feb

Bilgisayar bilimleri ve programlama ile ilgilenip de Hamming ismini duymamış olmak çok düşük bir olasılıktır herhalde. Bu tanıdık isim ve ilgilendiğim programlama dilleri bir araya gelince ister istemez algıda seçicilik oluşuyor. Bu seçicilik sonucunda önce “The Virtues of Laziness” makalesi ile karşılaştım ve yazarın C# kullanarak tembel fonksiyonel dillere içkin bir özelliği C# ile elde edebilmek için ne tür taklalar attığına baktım ve bunun uygulaması olarak Hamming sayılarının hesaplanması problemini ele aldığını fark ettim.

Kullandığım diller arasında C# da olduğu için bu tekniğin işime yarayacağını düşünüp not ettim ve ardından yorumları okumaya koyuldum ve karşıma Hamming sayılarının Haskell ile nasıl hesaplanabileceği çıktı:

hamming = 1 : map (*2) hamming # map (*3) hamming # map (*5) hamming
    where xxs@(x:xs) # yys@(y:ys)
              | x==y = x : xs#ys
              | x<y = x : xs#yys
              | x>y  = y : xxs#ys

Hemen GNU Emacs’ı ateşleyip kodu denedim ve sonsuza uzanan listelerin keyfini çıkardım:

*Main> take 4 hamming
[1,2,3,4]
*Main> take 10 hamming
[1,2,3,4,5,6,8,9,10,12]
*Main> take 30 hamming
[1,2,3,4,5,6,8,9,10,12,15,16,18,20,24,25,27,30,32,36,40,45,48,50,54,60,64,72,75,80]

Haskell öğrenmek için bir sebep daha diye bunu bir kenara kaydettim. Dikkatimi çeken bir başka şey ise son birkaç yıldır gözlemlediğim “popüler dillerin egzantrik kabul edilen dillerin özelliklerine yakınsaması” olgusuna dair bir örnek daha ortaya çıkmış olması.

Daha detaylı bir tartışma, C++ ve Haskell (ve başka pek çok dil) kıyaslaması için LtU’daki birkaç yüz yorumluk Expressivity of “idiomatic C++” yazısına bakılabilir.

Advertisements
 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: