n> Cok guzel, adim adim gidelim. Once birinci ornek: ilk sorumun
    n> cevabi ve fazlasi var. Soyle ki: 1)Ben (locally ...) formunu
    n> kitapta gormemistim, (declare (special ...)) da anlamsiz bir
    n> ornekte kullanildigindan ne ise yaradigi anlasilmiyor. 

Ben de 5-10 senede bir unutuyorum locally'i.  Son unuttugumda Kent'e
zahmet verdigim icin artik aklimdan cikmiyor simdi.  Baslangic
kitaplari bu islere pek girmiyorlar, onun icin oralarda pek goremezsiniz.
Sizin sordugunuzu da herkes sormuyor cunku o sekilde dusunmuyorlar.
Bilgisayar bilimi filan gibi birsey mi okudunuz, yoksa evvelce
bildiginiz diller bu kavramlari acik eden diller miydi?

Bir de sunu soyleyeyim, bu ornekler anlamak icin iyi de, normalde 
boyle kodun icinden cikilmaz.  Yazmamak lazim. 

[...]
    n> Ben bu (locally ...) yapisini ilk kez gordum.  Anladigim
    n> kadariyla, sadece dogrudan icinde bulundugu (let ...) blogu
    n> icin gercekten local, fakat onun ustunu yine de
    n> etkiliyor. 

Oyle dusunmeyin, yaniltici olur.  Deklerasyonun scopeu ile ilgili
dusunun, let'in degil.  Hyperspecteki ornek yardimci olur:

http://www.lispworks.com/documentation/HyperSpec/Body/d_specia.htm

(orada dipte son ornek)


[...]
    n> NOT 1: locally icindeki (setf var 'special1) burada etkili
    n> degil. Ama gel gor ki:

Etkili, ama etkili oldugu binding shadow olmus o let ile. (Etkili oldugu 
baglama golgelenmis mi demeliyim?  Daha mi anlasilir?)
Ipucu ekeyim koda:

(let ((var 'special)) ;; binding A
  (declare (special var))   
  (let ((var 'lexical)) ;; binding B     
    (print var) ;; B
    (locally (declare (special var)) 
      (print var) ;; A 
      (setf var 'special1) ;; A
      (print var)) ;; A
    (print var) ;; B
    (setf var 'lexical1) ;; B
    (print var)) ;; B
  (print var)) ;; A

    >> LEXICAL1 SPECIAL1
    n> NOT 2: burada NOT 1'deki (setf ...) etkili oluverdi.

Cunku B'li let'in scope'undan ciktik.  B'li let'in lexical scope'u 
icindeyken o locally buradaki 'var' referanslari 'var'in dinamik 
bindingine ait diyor.  Onlar da A bindigiyle ilgili.  

    n> Soru: (locally ...) icinde oldugu let blogu icin local etkiye
    n> sahip, ama onun ustundeki (let ...) blogunu etkiliyor yine
    n> de. Ilginc dogrusu: sadece o an gecerli blogu korumak icin
    n> sanki, ama onun uzerindekini yine de etkiliyor. Dogru anlamis
    n> miyim buraya kadar?

Hayir.  Belki let ve lexical scope diye dusundugunuz icin akliniz 
karisiyor.  Yukarki ipuclari isi gorur belki, olmadiysa devam edelim.

BM


_______________________________________________
cs-lisp mailing list
[email protected]
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp

Cevap