2011-05-29 26 views

cevap

7

Common Lisp

Erişim (Jeff'in yanıta bakın) aynı kapsamda işlevlerden mümkündür. Bunlar bile bu değişkenler için bir yere sorgulayamaz. Bu işlev Common Lisp standardı tarafından sağlanmaz. Birçok durumda, bazı durumlarda Common Lisp uygulamalarının bu bilgiyi nasıl alacağını bildiği açıktır. Örneğin, GNU Emacs için SLIME koduna (Common Lisp geliştirme ortamı) bakarsanız, kodunun ve backtrace işlevlerinin kodları bunu sağlamalıdır. Geliştirme bunu göstermek istiyor - Kullanıcı/programcı için Common Lisp standardı bu bilgiyi sağlamıyor.

+1

Teşekkürler bu ne aradığımı. –

4

yüzden sadece başka bir fonksiyon

(defun inspect-closure() (list (list 'x x) (list 'y y) (list 'z z))) 

ekleyip koymak, bir pano içine birden fazla işlevi olabilir let hesap özetinizin içinde

Kapatma işlemine erişecek bir işlev oluşturmaya çalışıyorsanız, kesinlikle konuşmak gerekirse, bunun mümkün olduğunu düşünmüyorum. x, y ve z yerel olarak tanımlanmıştır, bu yüzden onları dünyaya duyurmak istiyorsanız, kapağın içinden gelmelisiniz. Yapabildiğiniz şey, yerel değişkenlerini döndürme özelliği eklendiğinde let işlevselliğini kopyalayan bir makro oluşturmaktır. Muhtemelen, mylet veya başka bir şey gibi farklı bir ad vermek isteyeceksiniz. kapatma iç değişkenlere

+1

Teşekkürler Jeff, ancak listeleme veya denetim stili tür işlevi gibi ekli değişkenlere programlı erişim arıyorum. Görünüşe göre standart CL'de desteklenmiyor. –

+1

Öyleyse, bence, cevabımın ikinci kısmına göre, en iyi bahsinizi bir makro oluşturmaktır. Üzgünüz, daha fazla yardım edemeyiz! – Jeff