Bulent Murtezaoglu <[EMAIL PROTECTED]> writes:
>>>>>> "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.)
(do-symbols (s)
(when (boundp s)
(format t "~a~%" (symbol-name s))))
geldi ilk aklıma ama tam olarak istediğimi elde edemedim,
daha doğrusu
(loop for s
being the present-symbols
when (char= #\* (char (symbol-name s) 0))
collect s)
döngüsü ile aynı sonucu elde edemedim o do-symbols formunu kullanıp,
biraz daha benzetmek için
(do-symbols (s)
(when (and (boundp s) (char= #\* (char (symbol-name s) 0)))
(format t "~a~%" (symbol-name s))))
denedim, yine daha çok şey döndürdü.
Şimdi tabii benim kafam karıştı, o LOOP'un içindeki present-symbols
sözdiziminin tekabül ettiği şey ile bu do-symbols'un ele aldığı
şey bana mı farklı görünüyor gerçekten farklı mı filan.
Neden böyle oldu?
> 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_.
Deneme yapmak derken?
Bu arada az önce denedim, bir special tanımladım defvar ile
boundp değil, başında * var, yukarıdaki LOOP yapısı onu da döndürdü.
do-symbols, beklediğim gibi boundp kontrolü olmayınca döndürdü
ancak.
> 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.
Bir sonraki ANSI komite toplantısına dahil mi olsak
n'apsak? ;-)
> 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.
Hepsi VST'nin basinin altindan cikti, o sordu bu soruyu,
biz güzel güzel TBNL dinliyorduk halbuki :)
--
Emre Sevinc
eMBA Software Developer Actively engaged in:
http:www.bilgi.edu.tr http://ileriseviye.org
http://www.bilgi.edu.tr http://fazlamesai.net
Cognitive Science Student http://cazci.com
http://www.cogsci.boun.edu.tr
_______________________________________________
cs-lisp mailing list
[email protected]
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp