>>>>> "n" == nusret <[EMAIL PROTECTED]> writes:
[...]
n> ... Lexical olarak en ust blokta
n> gorulemeyen, yani local, bir degisken dusunun: bir
n> (let ((variable 0)) .....) ifadesiyle tanimladik bunu. Simdi bu
n> arkadasi daha alt lexical gorulebilirlik bloklarinda *dinamik
n> (yani special dedikleri cinsten) bir degisken yapmak mumkun mu?
Sordugunuz soruya ornekle cevap vereyim. Sordugunuz soru sormak
istediginiz soruyla ayni mi bilmiyorum oyleyse teyid edersiniz.
CL-USER> (let ((var 'special))
(declare (special var))
(let ((var 'lexical))
(print var)
(locally (declare (special var))
(print var)
(setf var 'special1)
(print var))
(print var)
(setf var 'lexical1)
(print var))
(print var))
LEXICAL
SPECIAL
SPECIAL1
LEXICAL
LEXICAL1
SPECIAL1
n> Fakat sadece yaratildigi lexical blok ve altini kastediyorum,
n> cunku (defparameter variable 1) dersem mesela let blogu icinde,
n> bu global olarak etkili oluyor...
Cunku defparameter _pervasive_ olarak special _proclaim_ ediyor onu.
Genelde eger _top level_ disinda bir yerde defparameter kullaniyorsaniz
ya siradisi birsey yapiyorsunuz yahut da yanlis kullaniyorsunuz.
n> Ayrica, gordugum kadariyla hayata lexical olarak baslasa bile,
n> bir (defparameter ...) kullanir kullanmaz degisken dinamik
n> oluveriyor ve ben bunun geriye donusunu de bulamadim.
Bu dogru bildigim kadariyla. Pervasive bir special declaration'i geri
dondurmenin yolu yok. Yukarki ornekte declare kullanildigi icin yapabildik
yaptigimizi. Bir daha deneyelim:
CL-USER> (proclaim '(special var))
NIL
CL-USER> (let ((var 'special))
(declare (special var))
(let ((var 'lexical))
(print var)
(locally (declare (special var))
(print var)
(setf var 'special1)
(print var))
(print var)
(setf var 'lexical1)
(print var))
(print var))
LEXICAL
LEXICAL
SPECIAL1
SPECIAL1
LEXICAL1
SPECIAL
SPECIAL
CL-USER>
Nasil oldu simdi? Niye boyle oldu diye bir dusunmek faydali olabilir.
Tabii o proclaim'den sonra ilkini denemek isterseniz cambazlik
yapmaniz lazim (unintern filan herhalde). Prompt'da calistigimiz icin
proclaim filan kullandim, bu tip seylerle ugrasacaksaniz declaim'e, ve
belki eval-when gibi seylere de bakmaniz lazim.
n> Bunun
n> istenmeyen yan etkileri olabilir, eger dikkat edilmezse. Buna
n> karsi bir emniyet mekanizmasi var mi?
n> -----------------------------------------
n> Bu arada, eklemis olayim, emniyet mekanizmasi ile (setq ...)
n> formunu kasdetmiyorum.
Benim bildigim yok. Onun icin pervasive olarak special yapilan sembollere
*foo* filan deniyor.
Acik olmadiysa lutfen biraz daha soru sorun, takildiginiz yerden yurumeye
calisalim.
BM
_______________________________________________
cs-lisp mailing list
[email protected]
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp