2015-05-10 14 views
5

Ho questa macro, che riscrive definire. Se rimuovo il backtick "" non funzionerà. Qual è la spiegazione?Che cosa significa backtick in LISP?

(defmacro define ((name &rest r) body) 
    `(defun ,name ,r ,body)) 

risposta

10

Una sola citazione seguita dalla rappresentazione scritta di un valore produrrà quel valore:

Esempio: '(1 x 'pippo') produrrà un valore che consente di stampare come (1 x "foo").

Supponiamo ora che non desidero un simbolo letterale x nell'elenco. Ho una variabile x nel mio programma, e voglio inserire il valore a cui x.

Per contrassegnare che voglio il valore di x piuttosto che il simbolo x, inserisco una virgola prima x:

'(1 ,x "foo") 

Non funziona così com'è se - io ora ottenere un valore che ha una virgola letterale e un simbolo x. Il problema è che quote non conosce la convenzione virgola.

apice inverso o backquote conosce la virgola-convenzione, a che darà il risultato corretto:

> `(1 ,x "foo") 
(1 3 "foo")   ; if the value of x is 3 

Per saperne di più qui: http://www.lispworks.com/documentation/HyperSpec/Body/02_df.htm

+0

Grande, ho capito, grazie. Un'altra cosa. Cosa fa questo e l'operatore prima del riposo? (& rest) – Alex

+1

Il '& rest' consente di definire funzioni che hanno una quantità variabile di argomenti. Supponi di voler definire una funzione più in cui entrambi (più 2 3) e (più 2 3 4) funzionano. Questa pagina ha una bella spiegazione: http://www.gigamonkeys.com/book/functions.html – soegaard

+1

Penso che valga la pena notare che questa funzione è chiamata ** quasiquoting ** o ** quasi-quoting **. –

5

L'apice inverso/backquote disabilita valutazione per ogni sottoespressione non preceduto da una virgola per la lista che segue l'operatore.

Dal ricettario comune di telecomunicazioni, explanation and a few examples.