I have this macro, which rewrites define. If I remove the " ` " backtick it won't work. What is the explanation?
(defmacro define ((name &rest r) body)
`(defun ,name ,r ,body))
A single quote followed by the written representation of a value will produce that value:
Example:
'(1 x "foo")
will produce a value that prints as (1 x "foo")
.
Suppose now that I don't want a literal symbol x
in the list.
I have a variable x
in my program, and I want to insert
the value to which x
is bound.
To mark that I want the value of x
rather than the symbol x
,
I insert a comma before x
:
'(1 ,x "foo")
It won't work as-is though - I now get a value that has a literal comma as well as a symbol x
. The problem is that quote
does not know about the comma convention.
Backtick or backquote
knows about the comma-convention, so that will give the correct result:
> `(1 ,x "foo")
(1 3 "foo") ; if the value of x is 3
Read more here: http://www.lispworks.com/documentation/HyperSpec/Body/02_df.htm
The backtick/backquote disables evaluation for every subexpression not preceded by a comma for the list that follows the operator.
From the common lisp cookbook, explanation and a few examples.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With