Volkan YAZICI <[EMAIL PROTECTED]> writes: > Merhaba, > > On Oct 15 11:01, Vehbi Sinan Tunalioglu wrote: >> Bu sayfada orneklerle verilmis temel bilgiler mevcut. Sorunuza >> istinaden arattim: >> >> http://psg.com/~dlamkins/sl/chapter11.html > > Common Lisp hakkında pek bir bilgim olmamasına rağmen, yukarıdaki > döküman oldukça hoşuma gitti. Scheme tarafında dikte edilen bound-ness > ve defined-ness ayrımına yukarıdaki sayfada da özellikle değinilmiş. > Fakat belgede geçen > > (let (...) > (defun ...)) >
(let ((a 5)) (define b (lambda (x) (* x a))) (b 4)) Seklinde tanimlamaniz mumkun. Yoksa yanlis mi anladim? > şeklindeki bir tanımlamanın Scheme'de karşılığı yok ne yazı ki. Bu > yüzden, o kadar okuduktan sonra bunları kullanımıyacak olmam beni epey > üzdü. > >> 1. Yanlislikla workspacede ayni isimli degiskenlerimi kullaniyorsunuz? > > Evet, yanlışlıkla değil, tamamen kasıtlı olarak aynı workspace'deki > tanımlamalar üzerinde değişiklik yapıyorum. > >> 2. "Destructive" fonksiyonlar mi kullaniyorsunuz? > > Sanırım yukarıdaki ifade bu soruya da "Evet." cevabını veriyor. > > Scheme için Guile implementasyonunu kullanıyorum ve scm_init_guile() ile > o anki thread içinde Guile'ı başlatıyorum. (Buna Guile moduna girmek > diyelim.) Çağrıda bulunan thread'i sonlandırmadığım sürece, Guile > oturumu benle birlikte yaşıyor. Dolayısı ile, aynı thread'de farklı > Scheme kodları çalıştırmak istediğim için, bunların hepsi aynı Guile > modunda çalışıyor. Bu yöntemin epey güzel yanları var: > > + Her kod çalıştırmak istediğinizde, Guile'ı sıfırdan initialize > etmenize gerek yok. Varolan Guile mode içinde işleminize devam > ediyorsunuz. > > + Tüm çalıştırılan Scheme kodları aynı Guile modunda olduğu için, > birbirlerinin yaptığı değişiklikleri görebiliyorlar. Bu da dolayısı > ile "globally shared variables" zamazingosuna olanak sağlıyor. > > Ama bu son özelliğin bir de gideri var: > > - Guile moduna girdikten hemen sonra bir takım genel tanımlamarda > bulunuyorum. Ve bu tanımların kullanıcı tarafından girilen Scheme > kodunu çalıştırdıktan sonra (ki kullanıcı kodu bu tanımlamaları > dolayısı ile değiştiriebiliyor) eski değerlerini geri almalarını > istiyorum. > > Yani demek istediğim o ki, çalıştırılan kodların bazı tanımlamalar > (örneğin yukarıda verdiğim "globally shared variables") üzerinde > değişiklik yapmasına izin verirken, bazılarının da kullanıcı kodunun > çalıştırılması bittikten hemen sonra eski değerlerini geri almasını > istiyorum. > Guile implementasyonunu bir closure icerisinde kullanmaniz mumkun olabilir mi? Boylece yaninizda tasidiginiz sey bir wrapper olacaktir. Wrap ettiginiz sey de kendi degiskenlerinizden medet umuyor olacaktir. Ya, aslinda SICP'ye (http://mitpress.mit.edu/sicp/) bakacak olursaniz kendi obje sisteminizi nasil implemente edebileceginize dair cok sasirtici ornekler mevcut. Closure'lardan faydalaniliyor. Sorununuza kesin cozum olabilecegine inaniyorum. Bu ornekler insani hafif dumura surukleyebilir. Ama 10 kaplan gucunde bir bilgidir bu! Saygilar, -- vst
pgpxubWWWpBQI.pgp
Description: PGP signature
_______________________________________________ cs-lisp mailing list cs-lisp@cs.bilgi.edu.tr http://church.cs.bilgi.edu.tr/lcg http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp