Selam Gokhan,
Saat farki malum, uyuyordum: o yuzden gec cevap
yazabildim :)
Tamam, kotu acikladim: "cagirirken funcall
kullanmak"tan bahsettim ama, daha duzgun soylemem
gerekirdi. Soyle: hayir, lambda (g) olmayacak, ama
baska birsey var: CL'deki multiple namespaces olayi
yuzunden, let ile g'yi baglarken ve f ile h'i
parametre olarak alirken aslinda fonksiyon degerini
degiskenin "value-cell"ine baglamis oluyoruz. Bunun
sonucu da su: mesela (g argument) diyemiyoruz:
(funcall g argument) dememiz gerekiyor.
Bunu duzenli olarak uygularsak Scheme dilinde yapilan
tanima (Scheme'de multiple namespaces diye birsey yok,
o yuzden kod biraz daha temiz yazilabiliyor), soyle
oluyor:
(setq S (lambda (f)
(let ((g (lambda (h)
(lambda (x) (funcall
(funcall f (funcall h h)) x)))))
(funcall g g))))
Bir alternatif let yerine flet kullanmak, ama o da tam
cozum degil...
Eger gozden baska birsey kacirmamissam boyle dogru
olmasi lazim :). defun ve flet kullanabiliriz, o
durumda en icteki (f (h h)) yerine (funcall f (funcall
h h)) ve (g g) yerine (g #'g) dememiz gerekecek yine
de saniyorum, ama denemedim. her durumda burada Scheme
sintaksi daha temiz.
Uyardigin icin cok sagol, tesekkurler!
--- Gokhan Gorali <[EMAIL PROTECTED]> wrote:
> Nusret, lambda(g) olmasi gerekmez mi?
>
> CL-USER> (setq S (lambda (f) (let ((lambda(g)
> (lambda (h) (lambda (x) ((f (h
> h)) x)))))
> (g g))
> ^^^^^^^
> ))
>
> #<CLOSURE :LAMBDA (F)
> (LET ((LAMBDA (G) (LAMBDA (H) (LAMBDA (X) ((F (H
> H)) X))))) (G G))>
>
>
>
> On 7/11/06, nusret <[EMAIL PROTECTED]> 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 ;)).
> >
> > Scheme kodu:
> >
> > (define S (lambda (f)
> > (let ((g (lambda (h)
> > (lambda (x) ((f (h h))
> x)))))
> > (g g))))
> >
> > (CL kodu icin define yerine setq yazin (ama
> dikkat: o
> > zaman funcall kullanmaniz gerekir cagirirken),
> veya
> > (defun S (f)
> > ....(gerisi ayni))
> >
> > Kolay gelsin,
> >
> > Nusret
> >
> >
> >
> >
> > __________________________________________________
> > Do You Yahoo!?
> > Tired of spam? Yahoo! Mail has the best spam
> protection around
> > http://mail.yahoo.com
> >
> > _______________________________________________
> > cs-lisp mailing list
> > [email protected]
> > http://church.cs.bilgi.edu.tr/lcg
> > http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp
> >
>
>
>
> --
> g�khan
> > _______________________________________________
> cs-lisp mailing list
> [email protected]
> http://church.cs.bilgi.edu.tr/lcg
> http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp
>
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
_______________________________________________
cs-lisp mailing list
[email protected]
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp