Merhaba.
C++'dan daha kolay ve fazla vakit almayan LISP derslerini anlatacağım.Kaç ders olur bilmiyorum.LISP'ten bahsedeyim.LISP,çalışan liste demektir.Yazdığımız her şey bir listedir.Bir dönem MIT öğrencilerine Scheme lehçesi okutuluyordu.Her neyse,derleyicimizi indirelim.LispWorks internetten kolayca indirilebilir.LISP hakkında türkçe kaynak pek yok.Burada tamamen anlaşılır şekilde anlatıyorum.Eğer konu fazla ilgi toplarsa WORD dosyası yapmayı düşünüyorum.
DERS1:FONKSİYONLAR ve OPERATORLERProgramı açın.Listener,sizin derleyiciniz.
Yazacağınız her şey () içine yazılacak.Kendi fonksiyonlarımızı defun ile tanımlıyoruz.
defun ile double fonksiyonunu oluşturduk.double x değişkeni tanımladık.Sonra bunu 2 kez döndürmesini istedik.Sonuçta bize DOUBLE yazdı.Yazarken şu sıraya dikkat:
1.parantez->ana parantezler.
2.parantez->bizim x değişkeninin parantezleri
3.parantez->* 5 2'nin.Aralarda boşluk gerek.Çünkü x2 şeklinde yazarsak bu kendi başına bir listedir.Ama x 2 dersek bu x'i 2 kez döndüreceği anlamında.
Parantezleri koyun.Program zaten yeşille hangi parantezin neye ait olduğunu gösterir.
+=Toplama op.Mesela 3+2'yi şöyle yazacağız.(+ 3 2).Bu kadar basit.
-=Çıkarma op.Mesela 3-2'yi şöyle yazacağız.(- 3 2).
*=Çarpma op.(* 3 2).
/=Bölme op.(/ 4 2).
= Eşit op.(= 3 2).
Eğer 3'ü 2'ye bölmeye çalışırsak hata alırız.Çünkü sonuç tam sayı değil.
Toplama işlemi programı şu:
Bize TOPLA 5 sonucunu verir.Bir sonraki derste görüşürüz.
DERS2:T VE NIL
Merhabalar.İkinci dersle karşınızdayım.T ve NIL işleyeceğiz.T doğru demektir.NIL yanlış demektir.Mesela 5 4'e eşit mi?
Bize NIL sonucunu verir.Ama (> 5 4) T sonucunu verir.
T ve NIL için herhangi bir ayrı bool tanımlamaya gerek yok.Bunu ilk konuya dahil etmeyi düşündüm.Sonradan ikinci ders olarak sundum.İyi çalışmalar.Sonraki derste görüşürüz.
DERS3:LAMBDA
Bu derste çağırıcıları anlatacağım.Temel LISP konuları bugün tamamlamayı ve CLOS'a geçmeyi düşünüyorum.
Lambda fonksiyon çağırıcıdır.İlk derste,double tanımlamıştık.Ona işlev atadık.Şimdi,aynısını lambda ile yapmayı deneyelim.
lambda'nın ne yapacağını belirtmedik.Yani sayı veya değişken tanımlamadık.Sadece OBJE gösterdi.Ama bunu yaparsak
Bu tanımda 3 sayısını x yerine koydurduk.DOUBLE görevinde kullandık.Bunun yaparken double'ın işlevine geçirdik.Aradaki tek fark ilk derste defun kullanmıştık.Bunda kullanmadık.Çünkü,lambda double'ın yerine geçti.Şimdilik bu kadar.Bir kaç saate görüşmek üzere...
C++'dan daha kolay ve fazla vakit almayan LISP derslerini anlatacağım.Kaç ders olur bilmiyorum.LISP'ten bahsedeyim.LISP,çalışan liste demektir.Yazdığımız her şey bir listedir.Bir dönem MIT öğrencilerine Scheme lehçesi okutuluyordu.Her neyse,derleyicimizi indirelim.LispWorks internetten kolayca indirilebilir.LISP hakkında türkçe kaynak pek yok.Burada tamamen anlaşılır şekilde anlatıyorum.Eğer konu fazla ilgi toplarsa WORD dosyası yapmayı düşünüyorum.
DERS1:FONKSİYONLAR ve OPERATORLERProgramı açın.Listener,sizin derleyiciniz.
Yazacağınız her şey () içine yazılacak.Kendi fonksiyonlarımızı defun ile tanımlıyoruz.
Kod:
(defun double(x) (* x 2))
1.parantez->ana parantezler.
2.parantez->bizim x değişkeninin parantezleri
3.parantez->* 5 2'nin.Aralarda boşluk gerek.Çünkü x2 şeklinde yazarsak bu kendi başına bir listedir.Ama x 2 dersek bu x'i 2 kez döndüreceği anlamında.
Parantezleri koyun.Program zaten yeşille hangi parantezin neye ait olduğunu gösterir.
+=Toplama op.Mesela 3+2'yi şöyle yazacağız.(+ 3 2).Bu kadar basit.
-=Çıkarma op.Mesela 3-2'yi şöyle yazacağız.(- 3 2).
*=Çarpma op.(* 3 2).
/=Bölme op.(/ 4 2).
= Eşit op.(= 3 2).
Eğer 3'ü 2'ye bölmeye çalışırsak hata alırız.Çünkü sonuç tam sayı değil.
Toplama işlemi programı şu:
Kod:
(defun topla(x y)(+ x y(+ 3 2)))(+ 3 2)
DERS2:T VE NIL
Merhabalar.İkinci dersle karşınızdayım.T ve NIL işleyeceğiz.T doğru demektir.NIL yanlış demektir.Mesela 5 4'e eşit mi?
Kod:
(= 5 4)
T ve NIL için herhangi bir ayrı bool tanımlamaya gerek yok.Bunu ilk konuya dahil etmeyi düşündüm.Sonradan ikinci ders olarak sundum.İyi çalışmalar.Sonraki derste görüşürüz.
DERS3:LAMBDA
Bu derste çağırıcıları anlatacağım.Temel LISP konuları bugün tamamlamayı ve CLOS'a geçmeyi düşünüyorum.
Lambda fonksiyon çağırıcıdır.İlk derste,double tanımlamıştık.Ona işlev atadık.Şimdi,aynısını lambda ile yapmayı deneyelim.
Kod:
CL-USER 1 > (defun double(x)(* x 2))
DOUBLE
CL-USER 2 > (setq double 2)
2
CL-USER 3 > (double double)
4
CL-USER 4 > (lambda(x)(* x 2))
#<anonymous interpreted function 200A0522>
CL-USER 5 > l
Kod:
((lambda (x) (* x 2)) 3)
Son düzenleme:
