2010-10-13 9 views
6

Quale sarebbe un esempio di condizionale anaforico in Lisp? Per favore, spiega anche il codice.Quale sarebbe un esempio di condizionale anaforico in Lisp?

+1

Ho solo familiarità con il termine "anaforico" per quanto riguarda le lingue naturali - ad esempio, un pronome può essere considerato un riferimento anaforico a un nome precedentemente menzionato. "John è un programmatore, lavora per Google." In questo esempio, "lui" è un riferimento anaforico a "John". Quindi penso che sia necessario spiegare cosa significa "condizionale anaforico" nel contesto della programmazione Lisp - non è un termine comunemente usato. –

+0

** @ Jim_Lewis: ** Ecco la spiegazione di cosa significa "condizionale anaforico" nel contesto della programmazione Lisp: http://weblogs.java.net/blog/2006/06/29/more-literate-programming-language- level-anaphora – blunders

+2

@Jim Lewis: Non sorprende che questo sia esattamente ciò che * anaforico * significa quando ci si riferisce ai macro. Vedi la mia risposta per link ed esempi. –

risposta

4

Un esempio è il Common Lisp LOOP:

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

La variabile IT ha il valore della espressione di prova. Questa è una funzionalità della funzione ANSI Common Lisp LOOP.

Esempio:

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

rendimenti

(SIN) 

perché solo "SIN" è un nome per un simbolo esistente, qui il simbolo SIN. In Common i nomi dei simboli Lisp hanno nomi maiuscoli internamente per impostazione predefinita.

+0

** @ Rainer_Joswig: ** Wow, grazie - è stato incredibilmente chiaro per me. Grazie ancora!! – blunders

+0

** @ Rainer_Joswig: ** Dalla tua esperienza, qual è stato il modo migliore per imparare LISP per te? – blunders

9

Paul Graham On Lisp ha un capitolo su Anaphoric Macros.

In sostanza, è un modo stenografico per scrivere affermazioni che evitino di ripetere il codice. Ad esempio, confrontare:

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

e

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

dove it è un nome speciale che si riferisce a tutto ciò che è stato appena calcolato in (big-long-calculation).

+0

** @ Greg Hewgill: ** Grazie, ancora un po 'perso nel codice di Paul Graham, ma è divertente da elaborare. – blunders

+2

@blunders: Infatti. Probabilmente i macro anaforici non sono il miglior punto di partenza, a meno che tu non abbia già molta familiarità con i diversi stili di macro in Lisp. On Lisp è un'ottima lettura. –

+0

** @ Greg Hewgill: ** Accetto. Ho scansionato alcuni libri LISP, principalmente The Little Schemer e simili. "Condizionatore anaforico" è arrivato in modo casuale a fare ricerche per questa domanda: http://stackoverflow.com/questions/3920046/is-it-common-for-a-language-to-evalute-undefined-as-equal-to- false-if-so-why-is – blunders

Problemi correlati