【发布时间】:2021-05-10 13:04:15
【问题描述】:
我正在努力学习 Elisp,所以我正在阅读 Elisp 的 GNU 手册。到目前为止,一切都很容易理解,但是当我阅读宏部分时,我遇到了一些我很难理解的东西。我也找不到合适的解释:
例如,一个简单的将变量加 1 的宏程序:
(defmacro inc (var)
(list 'setq var (list '1+ var)))
我不知道为什么setq 和1+ 前面有' 符号?这不会使它们成为文字元素列表吗? (例如一个包含三个元素的列表(setq var (1+ var))
为什么我不能写:
; this seems more reasonable to me
(defmacro inc (var)
(setq var (1+ var))
我不太确定 list 在这里是如何工作的,在这里使用 list 对我来说似乎很奇怪。谁能给我解释一下?
【问题讨论】:
-
我开始为您之前的问题输入一个相当详细的答案,但您在我有机会完成之前将其删除。
-
哦,我很抱歉,我想通过问一个更简单但更精确的问题来澄清我的问题。如果我取消删除它会有帮助吗? :(
-
宏章节确实解释了所有这些。很简单,可以写
(defmacro inc (var) `(setq ,var (1+ ,var)) );查找此其他引用机制的文档。 -
我必须运行,所以现在可能不值得取消删除。如果您在 12 小时后有空,我们或许可以尝试协调。但要点是,请查看 Emacs Lisp 参考手册。
-
宏的意义在于,它们允许您以函数无法做到的方式塑造语言的语法。您付出的代价是它们需要更复杂的报价。
标签: macros common-lisp elisp