2010-10-13 17 views
6

Lisp'de anaporik koşullara bir örnek ne olurdu? Lütfen kodu da açıklayınız.Lisp'de anaporik koşullara bir örnek ne olurdu?

+1

Sadece "anaporik" terimini doğal dillerle ilgili olarak bildiğim - örneğin, bir zamir daha önce belirtilen bir isim için anaforik bir referans olarak düşünülebilir. "John bir programcı. Google için çalışıyor." Bu örnekte, "o", "John" a anaporik bir referanstır. Bu yüzden, bir "anaporik şartlı" nın Lisp programlama bağlamında ne anlama geldiğini açıklamanız gerektiğini düşünüyorum - bu yaygın olarak kullanılan bir terim değil. –

+0

** @ Jim_Lewis: ** Burada, "anaporik şartlı" nın Lisp programlama bağlamında ne anlama geldiğini açıklaması: http://weblogs.java.net/blog/2006/06/29/more-literate-programming-language- level-anaphora – blunders

+2

@Jim Lewis: Şaşırtıcı olmayan bir şekilde, bu tam olarak ne * anaphoric *, makrolara başvururken anlamına gelir. Bağlantılar ve örnek için cevabımı görün. –

cevap

4

bir örneği, ortak Lisp LOOP olup:

(loop for item in list 
     when (general-predicate item) 
     collect it) 

değişken IT Test ifadesinin değeri vardır. Bu, ANSI Common Lisp LOOP özelliğinin bir özelliğidir.

Örnek:

(loop for s in '("sin" "Sin" "SIN") 
     when (find-symbol s) 
     collect it) 

döner

(SIN) 

sadece "SIN" varolan sembol, burada sembol SIN için bir isimdir çünkü. Ortak Lisp sembol adlarında, varsayılan olarak dahili büyük harf adları vardır.

+0

** @ Rainer_Joswig: ** Vay, teşekkürler - bu benim için inanılmaz derecede açıktı. Tekrar teşekkür ederim!! – blunders

+0

** @ Rainer_Joswig: ** Deneyimlerinizden, sizin için LISP'yi öğrenmenin en iyi yolu neydi? – blunders

9

Paul Graham'ın On Lisp bölümünün Anaphoric Macros üzerinde bir bölümü vardır.

Aslında, bu kod yinelenen kaçınan ifadeleri yazmak için kısa yoludur. Örneğin, karşılaştırma:

(let ((result (big-long-calculation))) 
    (if result 
     (foo result))) 

ve it sadece (big-long-calculation) yılında hesaplandı ne başvuran bir özel addır

(if (big-long-calculation) 
    (foo it)) 

.

+0

** @ Greg Hewgill: ** Teşekkürler, hala Paul Graham'ın kodunda bir tür kayıp var, ama işlenmesi eğlenceli. – blunders

+2

@blunders: Gerçekten. Anaphoric makroları, muhtemelen Lisp'teki farklı makro stillerine aşina değilseniz, başlamak için en iyi yer değildir. Lisp'de harika bir okuma var. –

+0

** @ Greg Hewgill: ** Kabul ediyor. Temel olarak The Little Schemer ve benzerlerini içeren birkaç LISP kitabı taradım. "Anaphoric koşullu" bu soru için araştırma yaparken rastgele ortaya çıktı: http://stackoverflow.com/questions/3920046/is-it-common-for-a-language-to-evalute-undefined-as-equal-to- false-if-so-why- – blunders

İlgili konular