Chapter 10 总结 (Summary)

  1. 调用 eval 是让 Lisp 将列表视为代码的一种方法,但这是不必要而且效率低落的。
  2. 你通过叙说一个调用会展开成什么来定义一个宏。台面底下,宏只是返回表达式的函数。
  3. 一个使用反引号定义的主体看起来像它会产生出的展开式 (expansion)。
  4. 宏设计者需要注意变量捕捉及多重求值。宏可以通过漂亮印出 (pretty-printing)来测试它们的展开式。
  5. 多重求值是大多数展开成 setf 表达式的问题。
  6. 宏比函数来得灵活,可以用来定义许多实用函数。你甚至可以使用变量捕捉来获得好处。
  7. Lisp 存活的原因是它将进化交给程序员的双手。宏是使其可能的部分原因之一。