29 Şubat 2012 Çarşamba

Haskell'de Listeler - 1

Haskell'de en önemli veri tiplerinden birisi Listelerdir (List).Gerek kullanım biçimi gerekse listelere uygun fonksiyonlar bizi Listeler için Haskell'e yöneltir.Listelere örnekler :
[1,2,3]       ['a','b']         [ ]
Gördüğümüz gibi birinci örnekte int listi ikincisinde karakter listi üçüncüsünde ise boş list örneği verdik.listeler homojen olmak zorundadır.ya hepsi karakter ya hepsi int örneğin.Listeler köşeli parantezlerle sınırlandırılır.karakter listeleri onunla eşleşen stringe eşittir mesela compilera

Prelude>"vay" == ['v','a','y']
True
doğru döndü.demekki "vay"=['v','a','y'] doğru bir önerme.
örneklerimizde kullanacağımız let kelimesini anlatalım.let bir değişkene geçici olarak bir değer atar.
mesela let a=[1,2,4,5] dedik sonra terminale a yazarsak bize [1,2,4,5] döner.
Prelude> let a=[1,2,3,4]
Prelude> a
[1,2,3,4]
Şimdi gelelim fonksiyonlara burada kısa açıklama ve gösterimlerle anlatmaya çalışalım ancak "vay" == ['v','a','y'] unutmayın :) örnekler açıklamaların altında


++ : iki listeyi birbirine yapıştırır. (aynı türden olacaklar)
Prelude> "haskell"++" "++"programlama"
"haskell programlama"
Prelude> [1,2,3]++[1,3]
[1,2,3,1,3]
: (iki nokta üst üste) bir elemanla bir listeyi yapıştırır 
Prelude> 'a' : "kin"
"akin"
Prelude> 'a':'a':[ ]
"aa"
[liste] !! numara : listenin numaraıncı elemanını döner.
Prelude> [1,2,4] !! 2
4
liste içinde liste örneği : b = [[1,2,3,4],[5,3,3,3],[1,2,2,3,4],[1,2,3]] (listenin elemanı liste örnek aşağıda)
 Prelude> let b = [[1,2,3,4],[5,3,3,3],[1,2,2,3,4],[1,2,3]]
Prelude> b
[[1,2,3,4],[5,3,3,3],[1,2,2,3,4],[1,2,3]]
Prelude> b !! 2
[1,2,2,3,4]
Listeler sözlük sıralamasındadır 
 Prelude> ['a'] >['b','c']
False
head [liste] : listenin başındaki bir elemanı döner
 tail [liste] : listenin başındaki bir eleman hariç diğer elemanları döner.
last [liste] : listenin son bir elemanını döner
init [liste] : listenin son bir elemanı hariç diğer elemanları döner.
Prelude> head [1,2,3,4]
1
Prelude> tail [1,2,3,4]
[2,3,4]
Prelude> last [1,2,3]
3
Bu son 4 fonksiyon bir liste alır (boş olmayacak).İlk yazımızda da belirtiğimiz üzere parantez yok.terminalde kullandığımız fonksiyonları .hs uzantılı dosyamızda da kullanabiliriz sorun olmayacaktır.Burada let'i kullanmamın sebebi şu an .hs dosyasıyla uğraşmadan hızlıca terminalde işleri halletmektir :)
reverse [liste] : listeyi ters çevirir 
take numara [liste] : listenin 0'dan başlayarak ilk numaraya kadar olan elemanlarını döner.
drop numara [liste] ise listenin 0'dan başlayarak ilk numaraya kadar olan elemanlarını düşürür diğerlerini döner.
Prelude> reverse [1,2,3]
[3,2,1]
Prelude> take 3 [1,2,3]
[1,2,3]
maximum [liste] : listenin maximum elemanını döner , minimum [liste] minimum , sum [liste] ise ,eğer sayı listesiyse , toplamlarını döner.
Örnek verilmemiş ve yazılmamış diğer fonksiyonları kendiniz deneyebilirsiniz :) 

haskell sembolü



Hiç yorum yok:

Yorum Gönder