2012-09-08 76 views
3

說我有一個返回引用列表,像這樣的功能:如何的Emacs Lisp評估引述表達的部分

(defun create-structure (n l) 
    '(structure (name . n)(label . l))) 

我想函數返回:

(create-structure foo bar) 
-> '(structure (name . foo)(label . bar)) 

相反,我得到儘可能excpected:

-> '(structure (name . n)(label . l)) 
+0

我想你可以添加一個''只是在n之前,如''(結構(名稱, n)(label。,l)))' – Patrick

+2

@Patrick你還需要使用反引號 – Sigma

回答

6

至少有兩種方法可以實現這一點,使用反引號語法或LIS顯式調用噸。

(defun create-structure-1 (n l) 
    `(structure (name . ,n) (label . ,l))) 

(defun create-structure-2 (n l) 
    (list 'structure (cons 'name n) (cons 'label l))) 

的GNU的Emacs Lisp參考提供關於這個問題的一個很好的閱讀: - http://www.gnu.org/software/emacs/manual/html_node/elisp/Backquote.html#Backquote

+2

你不需要爲此使用宏,你也可以在函數中使用反引號和逗號。反引號意味着一個單引號,所以你不需要同時使用這兩個引號。代替你的宏,你可以這樣做:'(defun create-structure(n l)\'(structure(name。,n)(label。,l)))' – Tyler

+0

好!我是新來的stackoverflow,有什麼更好的方法:我應該根據您的改進更新我的答案嗎? –

+0

我會更新您的答案,因爲defmacro位可能會讓讀者感到困惑。 – Tyler