14.1 宏的简单示例

假设我们想要定义一个 Lisp 结构来递增变量的值,效果类似于 C 语言中的 ++ 运算符。我们希望编写 (inc x) 就能实现 (setq x (1+ x)) 的效果。以下是实现该功能的宏定义:

(defmacro inc (var)
   (list 'setq var (list '1+ var)))

当以 (inc x) 调用该宏时,参数 var 是符号 x——而非 函数调用时那样取 x 的值。宏的体部利用这个符号构造出展开式,也就是 (setq x (1+ x))。宏定义返回这个展开式后,Lisp 会接着对其求值,从而完成 x 的递增操作。

Function: macrop object

这个谓词函数用于检测其参数是否为宏:如果是,返回 t;否则返回 nil

emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© 2025 Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike