2013-04-02 16 views
5

Çeşitli paketler yüklemek için SBCL, emacs, slime ve quicklisp kullanıyorum.Common Lisp'te basılı bir temsil nedir?

Ben örneğini ve şöyle bir hunchentoot akseptörü başlatmak, ben port 4242 tarayıcıyı açarak sınamak

CL-USER> (hunchentoot:start (make-instance 'hunchentoot:acceptor :port 4242)) 
#<HUNCHENTOOT:ACCEPTOR (host *, port 4242)> 

ve iyi çalışıyor.

Sonra yazdırılan gösterimi kopyalayabilirsiniz, kes ve böylece gibi komut vermek için: karşılık gelen bir başlangıç ​​tarafından döndürülen baskılı gösterimi ile

CL-USER> (hunchentoot:stop #<HUNCHENTOOT:ACCEPTOR (host *, port 4242)>) 
#<HUNCHENTOOT:ACCEPTOR (host *, port 4242)> 

Bu yalnızca eser.

Bu benim için şaşırtıcıdır. Basılı sunumun, muhtemelen nesnenin kendisi gösterilemediği için metin döndürüldüğünü düşündüm. Gibi, bu cubeentoot oldukça temiz olduğunu düşündüm: durmak nesne bulmak için metin dizesini kullanabilirsiniz. Ama sonra daha fazla deneyle, sadece herhangi birine değil, basıma tekabül eden basılı temsili kullanmak zorunda olduğumu farkettim. Ayrıca, fareyi basılı sunumun üzerine koyduğumda, tüm segmenti vurguladığımı fark ettim. Yani metin değil, aslında REPL içindeki nesne ve onu kullanabilirim.

Öte yandan, iade edilenler bir baskı gösterimidir, böylece onu görebilirim, ancak diğer tarafta REPL içinde kopyalayıp yapıştırabileceğim asıl nesne. Bu doğru mu? Sanırım öyle olmalı çünkü ben yapıyorum. Bu benim için tamamen şaşırtıcı.

Herhangi bir açıklama veya içgörü çok takdir edilecektir.

cevap

6

Bunlar “Sunumlar” olarak adlandırılıyor. SLIME Kullanıcı Kılavuzu, Presentations'a bakın.

belgeler de nesneler gitme ne olur açıklıyor ...

fikri çoğunlukla (et Zdybel, ark., An Bilgi Sunumu Sistemi, 1981) BBN, daha sonra simgecilik Lisp gelen

Makine ve pencere sisteminde çıkış sırasında alttaki nesneleri kaydeden taşınabilir Common Lisp Interface Manager. Bu sunumlar grafiksel ve metinsel çıktılar için çalışır ve kullanıcı arayüzü için önemli bir temel oluşturur. SLIME, REPL için fikri seçti.

+0

Mükemmel. Kılavuzun bağlantısı ve Zdybel referansı için teşekkür ederiz (Google kolayca bir PDF bulur). – kes

7

Bu SLIME "sihirli" dir. Aslında, Lisp'de böyle bir "baskı gösterimi" ile hiçbir şey yapamazsınız, çünkü okunamaz bir nesne olarak kabul edilir: uygulamanızın konsol modunda çalışın. Ama SLİME gerçek nesneye dernek hatırlar, bu yüzden o #<...> şey için nesne yerine yerleştirir - tür bir Lisp Machine gibi ... düzgün ve her zaman çalışır ne

şudur:

CL-USER> (defvar *server* (hunchentoot:start (make-instance 'hunchentoot:easy-acceptor :port 4242))) 
*server* 
CL-USER> (hunchentoot:stop *server*) 
#<HUNCHENTOOT:ACCEPTOR (host *, port 4242)> 
+2

Evet, normalde nesneyi yalnızca durdurabileceğim şekilde kaydederim. Bu yüzden SLIME, döndürülen nesneyi alıp yazdırma temsiline bağlar. Bu da döndü lambdas ile yapar. Güzel özellik orada olduğunu bilmiyordu. Bunun dışında bir soru ortaya çıkıyor: ne olursa olsun, tüm nesnelerin hala var olmasını istemiyorum? Belki de arabayı temizlemek onları öldürür. Bu onları kesinlikle erişilemez yapar. Bu tamamen başka bir soruya layık olabilir. – kes

İlgili konular