Volkan YAZICI <[EMAIL PROTECTED]> writes:

Merhaba,

> Başlattığım bir oturum içinde, kullanıcı tarafından girilen Scheme
> kodlarını sıra ile çalıştırıyorum. Bu çalıştırma esnasında hep aynı
> oturum (thread, dynamic context, ne derseniz artık...) kullanıldığı için
> çalıştırılan kodun herhangi bir önceden tanımlı değişken üzerinde
> değişiklik yapmış olma olasılığı çok yüksek. Bu yüzden bazı değerlerin,
> kullanıcının kodunun çalıştırılması bittikten sonra eski değerlerini
> almasını istiyorum. (Bir bakıma bazı değişkenlerin salt-okunur olmasını
> istemek gibi.)
>
> Konu ile ilgili olarak "fluids" ve "dynamic root" (bilmiyorum bunların
> CL'de tam olarak karşılığı ne fakat, Lisp dialektlerinin çoğu tarafından
> benimsenmiş olduğunu zannediyorum) başlıklarını inceledim fakat probleme
> çözüm getirecek bir sonuca ulaşamadım.
>
> Sizlerin bu konu hakkında fikirleri neler acaba? Benzer bir sorun ile
> daha önce karşılaşan oldu mu?

Soru aslinda bir cok kavrama deginmemizi gerektiriyor.. Ama temel
sorun call-by-value ve call-by-reference ayiriminda, assignment
isleminde ve scoping kavraminda yatiyor.

Lisp *genellikle* call-by-value yontemiyle calisir.

 PROMPT> (defvar *my-list* (list 1 2 3 4))
 PROMPT> (defun a (lst) (setf lst (cdr lst)))
 PROMPT> (a *my-list*)
 (2 3 4)
 PROMPT> *my-list*
 (1 2 3 4)

Bu da bahsettiginiz durumun neyden kaynaklandigini sormamiza neden
olur.

1. Yanlislikla workspacede ayni isimli degiskenlerimi kullaniyorsunuz?

2. "Destructive" fonksiyonlar mi kullaniyorsunuz?

Scope konusu biraz daha karisik. Elisp dynamic scope kullanirken,
common-lisp hem dynamic hem de lexical kullaniyor. Sanirim farkli
farkli block deyimleri buradaki karar acisindan onemli.

Benim programlama prensipleri baglaminda soyleyebilecegim, program
tasarimi sirasinda destructive fonksiyonlarin varligini kabullenmek ve
hangi fonksiyonlarin boyle davrandigini bilmek, scope kavramini uygun
yerde uygulamaktan ibaret. Cunku bugune kadar kurcaladigim Lisp
kodlarinda sirf bu durumdan korunmak amacli eklenmis bir sey
gormedim.

Bu sayfada orneklerle verilmis temel bilgiler mevcut. Sorunuza
istinaden arattim:

http://psg.com/~dlamkins/sl/chapter11.html

Diger yorumlari da merak ediyorum.

Saygilar,
Sinan

Attachment: pgpiErYqWTLQP.pgp
Description: PGP signature

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

Cevap