小编tes*_*lcl的帖子

这个宏有优势吗?

我正在阅读Peter Seibel的Practical Common Lisp.在第9章中,他正在通过创建单元测试框架来引导读者,并且他包含以下宏来确定列表是否仅由真实表达式组成:

(defmacro combine-results (&body forms)
  (let ((result (gensym)))
    `(let ((,result t))
       ,@(loop for form in forms collect `(unless ,form (setf ,result nil)))
       ,result)))
Run Code Online (Sandbox Code Playgroud)

我不清楚使用宏的优势在于什么 - 似乎以下内容会更清晰,并且对于动态值更有效:

(defun combine-results (&rest expressions)
  (let ((result t))
    (loop for expression in expressions do (unless expression (setf result nil)))
    result))
Run Code Online (Sandbox Code Playgroud)

宏的优点是,它在运行时对于在编译时扩展的任何调用更有效吗?或者它是一个范例的东西?或者这本书只是试图找借口在宏中练习不同的模式?

lisp macros common-lisp practical-common-lisp

8
推荐指数
2
解决办法
139
查看次数

标签 统计

common-lisp ×1

lisp ×1

macros ×1

practical-common-lisp ×1