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

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

Cevap