AydınBaltacıBlog!

Beni mutlu eden her şey!
Önceki Yazı:   Sonraki Yazı:

Ml ile fonksiyonel programlama 2

VN:F [1.8.6_1065]
Rating: 8.3/10 (4 votes cast)

ML Programlama konusundan devam;
aldığım notlar kadar örnekleri buraya da geçirmeye çalıştım yukarıda linki verilen giriş konusundan compiler(derleyici)linkine ulaşıp kurulumu yaptıktan sonra komutları çalıştırabilirsiniz.
ML tanım örnekleri:
17;
val it=17:int   için;derleyicide 17 komutunu girdiğinizde karşılık olarak val it’de girilen değerin bir belirli adı olmayışından kaynaklı “val it” kullanılmakta bu değerin =17 olduğu ve type’ının integer(tam sayı) olduğunu belirtir.diğer bir örnek:
2+3;
val it=5:int
Ml’de negatif işaretli sayıları karşılamak için tilda(~) kullanılır.~3 gibi,ayrıca tanımlı operatörlere göz atacak olursak; div , mod , abs , + , – , / , * ve ~ .  Fakat / ile integerlar(tam sayı) üzerinde işlem yapılamadığını da not düşelim.
operatorlar için örnek vermek gerekirse;  3/4′ün Ml üzerinde 3div4  şeklinde gösterildiğini söylemek yeterli olacaktır.
Ayrıca typelar her zamankinden daha önemli bir yer tutuyor Ml üzerinde,işleme giren typelar aynı türden olmalı ve sonucu da yine aynı type üzerinden vermelidir,int ve int işleme girebilir ve sonuç integer olarak çıkar.
String:
**örn:
“Hello”;
val it= “Hello”:string
size “Hello”;
val it=5:int
List mantığı:
Listleri Ml’de arraylere benzetebiliriz,tek farkı indexi olmayışı yani yanlızca ilk elemana access edebilmemizdir.
list kullanımı:
**örn:
[1,2,3];
val it=[1,2,3]:int list
["me","you"];
val it=["me","you"]:string list  şeklinde homojen(aynı tipte eleman bulunduran) listeler oluşturabilmemiz mümkün ayrıca; 2 listeyi veya bir elaman ile bir listeyi birleştirebiliyoruz bunuda bir örnek ile açıklamak gerekirse;
**örn:
1::[2,3];
val it=[1,2,3]:int list   veya
5::3::nil;  burada nil empty listdir.yani 3::nil’in karşılığı [3]‘dür.sonuç olarak 5:: ile  3::nil ‘in karşılığı;
[5,3] olur.
val it=[5,3]:int list
birde listteki index yok açıklamasının yanına head ve tail’ide ilave etmek gerekli:
[1,2,3] listesi örneğimiz olsun bu listede head=1 ve tail=[2,3]‘tür yani baş ve kalan şeklinde ayırıyoruz.[2,3] için head=2 tail = 3 olur.Ve [3] için ise head=3 tail=nil(empty list)’dir.
Yine bir eleman ve listeyi birleştirmeyi örneklemiştik 2 ayrı listeyi birleştirmek için ise @ işaretini kullanacağız örnek vermek gerekirse:
**örn:
[1,2]@[5,4];
val it=[1,2,5,4]:int list  olur.

tarlamı da koyarım gözüm renklenir nereye kadar fonksiyon değil mi okur..

tarlamı da koyarım gözüm renklenir nereye kadar fonksiyon değil mi okur..

Fonksiyonlar:

fun f(x)=x+1;
val f=fn:int->int   burada f fonksiyonun adıdır,fn fonksiyonu gösterir,int ise parametrenin type’ıdır burada int diye özellikle belirtilmese bile x+1′de 1 int olduğu için ve daha evvede Ml’de işlem gören elemanların aynı type’da olmak zorunda olduklarını söyledğimizden otomatik olarak x’i de int olarak algılar. ->int ise return type’ı gösterir.birkaç örnek ile devam edelim:

**örn:

fun f(x)=x+1;
val f=fn:int->int   burada f fonksiyonun adıdır,fn fonksiyonu gösterir,int ise parametrenin type’ıdır burada int diye özellikle belirtilmese bile x+1′de 1 int olduğu için ve daha evvede Ml’de işlem gören elemanların aynı type’da olmak zorunda olduklarını söyledğimizden otomatik olarak x’i de int olarak algılar. ->int ise return type’ı gösterir.birkaç örnek ile devam edelim:fun f(x)=x+1;f(2);

val it=3:int    bu fonsiyonu ilk örnek olarak yazmıştık alt satırda f(2) ile fonksiyondaki x parametresine 2′yi yolladık ve işlem sonucunu en alt satırda 3:int olarak aldık diğer fonksiyon örneklerine göz atmak gerekirse:
fun square(t)=t*t;
val square=fn:int->int  örneğinde return type’ın integer olduğunu görüyoruz bunun sebebi matematiksel operatörlerde Ml’in otomatik olarak type’ı int almasıdır.
listedeki ilk elemanı gösteren bir fonksiyon yazalım:
**örn:
fun first(head::tail)=head;
val first=fn:a list->a
first ([5,7,3]);
val it=5:int
Listenin son elemanını gösterecek olan bir fonksiyon yazalım ama listelerde index yoktu bunun için head ve tail olarak listeleri ayıracağız ve son olarak elimizde nil(empty list) kalıncaya kadar listeyi bölmeye devam eden bir fonksiyon yazmamız gerekli:
**örn:
fun last(h::nil)=h|
last(h::t)=last(t);  çalışma şeklini örnekle inceleyecek olursak :
last([5,7,3]);
h=5  ve t=[7,3] olur,head ile işimiz olmadığından tail ile aynı işlem devam edecek:
last([7,3]);
h=7  t=[3]
last([3]);
h=3  t=nil  artık tail’de nil’e ulaştığımıza göre listenin son elemanını bulmuşuz demektir.
val it=3::nil
Fonksiyon örneklerine devam edecek olursak,bir listenin elemanlarının değerlerini birer arttıralım:
[1,2,3] listesini [2,3,4]‘e dönüştürmek için kullanacağımız fonksiyonu yazalım:
**örn:
fun incr(nil)=nil|
incr(x::y)= x+1::incr(y);  çalışma şekline şöyle bir göz atacak olursak:
incr([1,2,3]);
x=1
y=[2,3]  ve
2::incr([2,3])
x=2  ve y=[3]
3::incr([3])
x=3  ve y=nil
4::incr([nil])
2::3::4::nil  =>  [2,3,4]  şeklinde liste dönüştürülmüş olur.
Ml fonksiyonları hakkında kalan örnekleri ve diğer konuların tanımlarına daha sonra devam edeceğim,yine daha ayrıntılı bilgiye ulaşmak için ilk konuda verdiğim tutorial içeren resmi adresi kullanabilirsiniz,Ml için türkçe kaynak veya yardım veren bir içerik ne yazıkki ben bu yazıyı yazarken yoktu..

EkleBunu Sosyal Paylaşım Butonu
VN:F [1.8.6_1065]
Rating: 0 (from 0 votes)
Ml ile fonksiyonel programlama 28.3104

Etiketler:, , , , , , , , , , , , , ,

Yayının Kategorisi: Genel 9 ay önce 21:25.

2 Yorumlar

2 Yorumlar

  1. güzel derleme

    UN:F [1.8.6_1065]
    Rating: 0.0/5 (0 votes cast)
    UN:F [1.8.6_1065]
    Rating: 0 (from 0 votes)

Yorum Yap


Follow Aydinbltc on Twitter