6 Haziran 2012 Çarşamba

Bol matematik, biraz programlama

     En başta işin biraz matematik kısmına girip "Nedir şu fonksiyon?" sorusuna cevap vermek istiyorum. Bu kısımda programlamayla ilgili pek birşey anlatmayacağım için sıkıcı olabilir.     



       Lisede matematikte gördüğmüz fonksiyonlar aslında fonksiyonel programlamanın temelleridir. Biraz özet geçmek gerekirse, fonksiyon kavramını anlamak için önce küme kavramını anlamak gerekir. Küme dediğimiz kavram aslında objeler topluluğudur. Örnek olarak; bilgisayarınızda yüklü yazılımlar yada şu anda bu yazıyı okurken tarayıcınızda açık olan sekmeler olabilir. Küme kavramı beraberinde alt küme kavramınıda getirir, alt küme dediğimiz kavram ise yine bir kümedir. Bir alt kümenin sahip olduğu bütün elemanlar aslında onun altında olduğu kümenin elemanlarıdır. Örnek olarak; bilgisayarınızda yüklü olan oyunlar, bilgisayarınızda yüklü olan yazılımların bir alt kümesidir yada en basitinden doğal sayılar kümesi reel sayılar kümesinin bir alt kümesidir. Kümeler arasında kartezyen çarpım denilen bir işlem tanımlanmıştır bu işlemin amacı iki kümenin elemanlarından yeni bir küme oluşturmak gibi düşünülebilir. Örnek vermek gerekirse:

 A = {1,2},  B = {3,4} olsun  AxB = {(1,3),(1,4),(2,3),(2,4)} olur.

Burda tahmin edebileceğniz gibi 'x' karteztyen çarpma işleminin operatörüdür.
Bir kartezyen çarpmanın sonucunda ortaya çıkan kümenin alt kümelerine bağıntı deriz. Yine yukardaki örneğe ek olarak:

R = {(x,y) | x ve y tek sayı , x \in \!\, A  ve y \in \!\, B} olsun

bu durumda R = {(1,3)} bir bağıntıdır.


Gördüğünüz gibi R, AxB'nin bir alt kümesidir ve aynı zamanda R bir bağıntıdır.
Son olarak tanılamamız gereken şey tabiki fonksiyon. Fonksiyonlardan bahsederken tanım kümesi ve değer kümesinden bahsetmeden olmaz. Tanım kümesi kısaca bir bağıntının elemanlarında ilk elemanın ait olduğu kümedir, değer kümesi ise ikinci elemanının ait olduğu kümedir. Örnek vermek gerekirse:

 AxB = {(1,3),(1,4),(2,3),(2,4)} ise A tanım, B değer kümesidir.


Fonksiyon dediğimiz kavramda aslında bir bağıntıdır ve aşşağıdaki şartı sağlıyan her bağıntı bir fonksiyondur:

  • Tanım kümesindeki her eleman, bağıntının sadece ve kesinlikle bir elemanında bulunmalıdır.

Bu tanımı daha matematiksel yapmak istersek:

 A ve B iki küme olsun ve R AxB 'nin bir alt kümesi olsun.

 Eğer  \forall \!\, x \in \!\, A için yanlızca bir y \in \!\, B (x,y) \in \!\, R ilişkisini

 sağlıyorsa ise R bir fonksiyondur.

 Son bir örnekten sonra bu kısmı bitiricem ve fonksiyonlarla ilgili geri kalan matematiksel bilgilere haskelle haşır neşir olurken değinmeye çalışıcam. 

f : \mathbb{R} \!\, => \mathbb{R} \!\,, f(x) = x2 olsun

Burada f fonksiyonu aslında \mathbb{R} \!\,x\mathbb{R} \!\,'ın bir alt kümesidir,

f = {(x,x2) | x \in \!\, \mathbb{R} \!\,} yani

f = {...,(0,0),(1,1),(2,4),(3,9),(4,16),...}




        Şimdi yukarıda verdiğimiz örnek olan f(x) = x2  fonksiyonun Haskell koduna bakalım,

f n = n*n

Gördüğnüz gibi göz yaşartıcı derecede yalın, bir kare fonksiyonumuz oldu.


Hiç yorum yok:

Yorum Gönder