有没有办法检查符号是否被引用?
问题描述:
我正试图在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)
在此先感谢。
答
宏参数是未评估,所以是的,你可以检查是否引用了一个参数,如果没有,引用它。像这样?
(defmacro quote-only-if-is-not-quoted (arg)
(if (and (consp arg)
(eq (car arg) 'quote))
arg
`(quote ,arg)))
+0
没错!谢谢! –
“是否引用符号”的概念是相当无意义的,因为“引用”不是一个概念。 'quote',当被评估为特殊形式时,禁止评估数据。它没有任何其他特殊含义,对于elisp宏,“引用”符号仅仅是一个包含两个符号的列表,其中第一个符号是“quote”。没有更多的上下文,对于我想要解决什么问题,我感到非常困惑。 –
对,谢谢你的回答。我正在试图使[宏](https://gist.github.com/ryukinix/f8b2231d1f2e3e8b95e4bb3312be5370)以两种方式工作:(when-system linux ...)和(when-system'linux ...)。换句话说,我希望第一个参数只有在不作为带引号的符号传递时才可以引用。但是,按照你确实回答的方式,现在我认为这是不可能的。 –