Chapter 13 练习 (Exercises)

  1. 检验你的编译器是否支持 (observe)内敛声明。
  2. 将下述函数重写为尾递归形式。它被编译后能快多少?
  1. (defun foo (x)
  2. (if (zerop x)
  3. 0
  4. (1+ (foo (1- x)))))
  5. 注意:你需要增加额外的参数。
  1. 为下述程序增加声明。你能让它们变快多少?
  1. (a) 5.7 节中的日期运算代码。
  2. (b) 9.8 节中的光线跟踪器 (ray-tracer)。
  1. 重写 3.15 节中的广度优先搜索的代码让它尽可能减少使用构造。
  2. 使用存储池修改 4.7 节中的二叉搜索的代码。

脚注

[1]较早的实现或许不提供 declaim ;需要使用 proclaim 并且引用这些参量 (quote the argument)。
[2]为了让内联声明 (inline declaration) 有效,你同时必须设置编译参数,告诉它你想获得最快的代码。
[3]有两种方法可以描述 Lisp 声明类型 (typing) 的方式:从类型信息被存放的位置或者从它被使用的时间。显示类型 (manifest typing) 的意思是类型信息与数据对象 (data objects) 绑定,而运行时类型(run-time typing) 的意思是类型信息在运行时被使用。实际上,两者是一回事儿。