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))
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))
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
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.
Grande, ho capito, grazie. Un'altra cosa. Cosa fa questo e l'operatore prima del riposo? (& rest) – Alex
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
Penso che valga la pena notare che questa funzione è chiamata ** quasiquoting ** o ** quasi-quoting **. –