【问题标题】:When and how often do macro expansions happen in SBCL Common Lisp implementation?在 SBCL Common Lisp 实现中,宏扩展何时以及多久发生一次?
【发布时间】:2021-10-22 09:35:34
【问题描述】:

一些 Lisp 实现 (i) 扩展宏一次保存结果 重复使用; (ii) 其他人在每次宏调用时重新展开宏。一些 实现 (iii) 甚至 尝试函数体 中扩展宏调用 在时间,该函数被 DEFUNed。

SBCL 是哪一种?

谢谢。

【问题讨论】:

    标签: macros common-lisp sbcl lisp-macros


    【解决方案1】:

    在 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
    * 
    

    因此,函数定义有一个扩展,而在该函数的运行时没有。

    然后可以尝试文件编译器、解释器、不同的调试选项等来检查实现完成的宏扩展的数量。

    【讨论】:

      猜你喜欢
      • 2016-10-27
      • 2013-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      • 2019-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多