我有這個宏,它重寫定義。如果我刪除「`」反向,它將無法工作。什麼是解釋?LISP中的反撥意味着什麼?
(defmacro define ((name &rest r) body)
`(defun ,name ,r ,body))
我有這個宏,它重寫定義。如果我刪除「`」反向,它將無法工作。什麼是解釋?LISP中的反撥意味着什麼?
(defmacro define ((name &rest r) body)
`(defun ,name ,r ,body))
單引號後跟一個值 的書面陳述將產生值:
實施例: 「(1בfoo’的) 將產生作爲打印(1 x "foo")
的值。
現在假設我不希望文字符號x
在列表中。 我的程序中有一個變量x
,我想插入 的值,其中的值爲x
。
爲了紀念,我想的x
價值,而不是符號x
, 我x
前插入一個逗號:
'(1 ,x "foo")
它將無法正常工作,雖然是 - 我現在得到的值有一個字面逗號以及一個符號x
。問題是quote
不知道逗號規則。
BACKTICK或backquote
知道逗號慣例,到會給出正確的結果:
> `(1 ,x "foo")
(1 3 "foo") ; if the value of x is 3
在這裏閱讀更多:http://www.lispworks.com/documentation/HyperSpec/Body/02_df.htm
反向/反向引用禁止評估每個子表達式的前面沒有跟隨運算符列表的逗號。
來自普通的lisp食譜,explanation and a few examples。
太好了,我知道了,謝謝。還有一件事。休息之前那個&運營商做什麼? (&rest) – Alex
'&rest'允許你定義具有可變參數的函數。假設你想定義一個加功能,其中(加2 3)和(加2 3 4)都起作用。這個頁面有一個很好的解釋:http://www.gigamonkeys.com/book/functions.html – soegaard
我認爲值得注意的是,這個功能被稱爲** quasiquoting **或**準引用**。 –