为了完全理解如此强大的 lisp 宏,我想到了一个问题。我知道关于宏的一条黄金法则是“当函数完成工作时,切勿使用宏”。然而,阅读第 9 章 -实用:构建单元测试框架- 从《实用的通用 Lisp
;; Function defintion.
(defun report-result (result form)
(format t "~:[FAIL~;pass~] ... ~a~%" result form))
;; Macro Definition
(defmacro check (form)
`(report-result ,form ',form))
好的,我理解它的目的,但我可以使用函数而不是宏来完成它,例如:
(setf unevaluated.form '(= 2 (+ 2 3)))
(defun my-func (unevaluated.form)
(report-result (eval unevaluated.form) unevaluated.form))
- 这是否可能只是因为给定的宏太简单了?
- 此外,由于代码本身(如控制结构、函数等)被表示为 LIST,Lisp 宏系统相对于它的对手来说是否如此强大?