2017-08-02 140 views
0

我正試圖在Emacs Lisp上創建一個宏,我正在努力查看用戶是否可以傳遞符號引用或不引用的符號。有沒有辦法檢查符號是否被引用?

其實我需要類似quote-only-if-is-not-quoted宏。有沒有這樣的事情?我對Lisp方言沒有發現任何關於此的信息。宏示例:

(quote-only-if-is-not-quoted 'q) => (quote q) 
(quote-only-if-is-not-quoted q) => (quote q) 

在此先感謝。

+3

「是否引用符號」的概念是相當無意義的,因爲「引用」不是一個概念。 'quote',當被評估爲特殊形式時,禁止評估數據。它沒有任何其他特殊含義,對於elisp宏,「引用」符號僅僅是一個包含兩個符號的列表,其中第一個符號是「quote」。沒有更多的上下文,對於我想要解決什麼問題,我感到非常困惑。 –

+0

對,謝謝你的回答。我正在試圖使[宏](https://gist.github.com/ryukinix/f8b2231d1f2e3e8b95e4bb3312be5370)以兩種方式工作:(when-system linux ...)和(when-system'linux ...)。換句話說,我希望第一個參數只有在不作爲帶引號的符號傳遞時纔可以引用。但是,按照你確實回答的方式,現在我認爲這是不可能的。 –

回答

2

宏參數是未評估,所以是的,你可以檢查是否引用了一個參數,如果沒有,引用它。像這樣?

(defmacro quote-only-if-is-not-quoted (arg) 
    (if (and (consp arg) 
      (eq (car arg) 'quote)) 
     arg 
    `(quote ,arg))) 
+0

沒錯!謝謝! –

相關問題