nusret wrote:
Aramizda CS okuyan arkadaslar gormus olabilirler, ama
bir hafiza yenilemesi olur onlar icin. Gormemis
olanlari da biraz dusundurur.
Soru su: asagidaki kod ne is yapar ve, asil onemlisi,
neden ilginc (umarim ilginctir sizin icin de :)? Onemi
daha cok teorik, ama cok hos geldi bana (hatta
Amazon.com'dan bu 4 satir kodun verdigi ilham mi
dersiniz, gaz mi artik, bilmem, bir de kitap
ismarladim ;)).
Hangi kitap?
Scheme kodu:
(define S (lambda (f)
(let ((g (lambda (h)
(lambda (x) ((f (h h)) x)))))
(g g))))
Ben genellikle bu gibi durumlarda asagidaki gibi düsünüyorum (beynime gömülü
bir lisp interpreter olmadigi icin)
1- S, f parametresi alan bir fonksiyon.
2- Bu fonksiyon ne yapiyor?
3- Once g diye bir sey tanimliyor.
4- Sonra da g fonksiyonuna yine kendisini yani g fonksiyonunu parametre
olarak geciriyor.
5- Peki g nedir, h parametresi alan bir fonksiyondur.
6- g fonksiyonu ne yapiyor?
7- tek parametre alan bir fonksiyon (h) ve bir fonksiyon döndürüyor.
Döndürdügü fonksiyon
nasil bir sey?
8- g fonksiyonunun döndürdügü fonksiyon tek bir x parametresi alan ve bu
x parametresini
de (f (h h)) fonksiyonuna geciren türde bir fonksiyon.
Biraz karisti gibi sanki, bu durumda S dedigimiz sey fonksiyon döndüren
bir fonksiyona (yani g)
yine kendisinin uygulanmis halinde (yani g'nin g'ye uygulanmis hali)
ortaya cikan fonksiyonu döndüren
bir fonksiyon.
Bu böyle olmayacak deyip Gabriel'in "The Why of Y" makalesini okumaya
gidiyorum ben! :)
http://www.dreamsongs.com/NewFiles/WhyOfY.pdf
--
Emre S.
_______________________________________________
cs-lisp mailing list
[email protected]
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp