正确编写具有命名符号的宏

时间:2020-07-30 08:31:22

标签: macros common-lisp

以下代码的问题是多重评估:

(defmacro with-object (name &body body)
  `(let ((,name (create-object)))
     ,@body
     (free-object ,name)))

但是我不知道该怎么做。

1 个答案:

答案 0 :(得分:2)

为了在代码的let绑定中使用名称,它必须包含一个符号。您提供的代码中应该没有多重评估问题,因为名称所包含的符号仅在扩展中被赋予了绑定,并在该绑定的上下文中针对自由对象调用进行了评估。

相关问题