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

