>>>>> "ES" == Emre Sevin <Emre> writes:

    ES> 4 gün sonra tekrar e-posta listesine kavusmak güzel.  Liste
    ES> calismadigi icin ve güvenemedigim icin toplantiyla ilgili
    ES> notlarimi bloga yazdim, bazi sorularin cevaplari orada:

    ES>  http://ileriseviye.org/blog/?p=203

Pekiyi.  Bu degiskenleri listele isi icin verilen cozum pek hos degil.
Sembolleri ele gecirmek kolay (loopculara denk gelmis fz, do-all-symbols
ve arkadaslari da var).  Orada '*' aramak cirkin bir hack, daha fazla 
ve duzgun seyler yapilabilir.  Konunun iyi anlasilmasi icin bir kac seyi
acayim.

CL'de global lexical diye birsey yok.  Global varlar special.  Oyleyse
mesele bir sembolun special var olup olmadigini anlamaya kaliyor.  Ama

(defvar *foo* 'bar)

dedigimiz zaman esasinda *foo*'yu special yapan sey defvar'in efektif 
olarak foo'yu special diye declaim etmesi.  Yukarki formda ayni zamanda 
*foo*'yu bind ediyor, onun icin bunu yakalamak kolay.  Standart 
olarak boundp var, CLSH'den bakarsaniz bu isi gorecegini farkedeceksiniz 
(lexicallari degil speciallari kontrol ediyor, dolayisiyla bir sembol 
boundp ise special var. olmak zorunda.)

Peki

(defvar *foo*) 

icin ne yapilabilir?  Bu durumda boundp nil verecek, ama *foo* pesinde
oldugumuz speciallardan biri.  Lispimiz onun special oldugunu biliyor,
fakat biz kolayca ogrenemiyoruz.  Bunu ANSI CL'de deneme yaparak
cikartmaktan baska yol gozukmuyor _bana_.  

Eger ANSI disina cikarsak, isimiz kolay.  CLtL2'de environmentlar
vardi mesela ama standartlasacak kadar olgunlasmadiklarindan,
strandarda girmediler.  Daha guncel olan Franz'in yeni cikarttigi ve
diger lisplerin de kullanmasini istedigi 'environments':

http://www.franz.com/support/documentation/7.0/doc/environments.htm

Eger lispinizde bu tip bir ek varsa, 'soyle bakayim bu sembol nedir' 
diyebiliyorsunuz.  Mesela:

http://www.franz.com/support/documentation/7.0/doc/operators/system/variable-information.htm

Tabii bu istedigimizden fazlasini yapiyor, bir de lexical variable olup 
olmadigini soyluyor.  

Herneyse, kusura bakmayin acele yazdigimdan Hyperspec'e link veremedim.
Yukarida Ingilizce olan asagi yukari hersey'i Hyperspec'de
bulabilirsiniz.  Cok ugrasmaya degecek birsey degil baska ogrenilecek
seyler varken, ama meraklisi icin sembol isimlerinde '*' arariz
cozumunu asan bir derinligi olabilecegini soylemek istedim.

BM



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

Cevap