>>>>> "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