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

Cevap