【发布时间】:2021-10-22 09:35:34
【问题描述】:
一些 Lisp 实现 (i) 扩展宏一次并保存结果 重复使用; (ii) 其他人在每次宏调用时重新展开宏。一些 实现 (iii) 甚至 尝试 在 函数体 中扩展宏调用 在时间,该函数被 DEFUNed。
SBCL 是哪一种?
谢谢。
【问题讨论】:
标签: macros common-lisp sbcl lisp-macros
一些 Lisp 实现 (i) 扩展宏一次并保存结果 重复使用; (ii) 其他人在每次宏调用时重新展开宏。一些 实现 (iii) 甚至 尝试 在 函数体 中扩展宏调用 在时间,该函数被 DEFUNed。
SBCL 是哪一种?
谢谢。
【问题讨论】:
标签: macros common-lisp sbcl lisp-macros
在 REPL 中:
* (defparameter *expansions* 0)
*EXPANSIONS*
* (defmacro foo ()
(incf *expansions*)
(print (list :expansions *expansions*))
nil)
* (foo)
(:EXPANSIONS 1)
NIL
* (defun bar () (foo))
(:EXPANSIONS 2)
BAR
* (bar)
NIL
*
因此,函数定义有一个扩展,而在该函数的运行时没有。
然后可以尝试文件编译器、解释器、不同的调试选项等来检查实现完成的宏扩展的数量。
【讨论】: