Chapter 13 练习 (Exercises)
- 检验你的编译器是否支持 (observe)内敛声明。
- 将下述函数重写为尾递归形式。它被编译后能快多少?
(defun foo (x)
(if (zerop x)
0
(1+ (foo (1- x)))))
注意:你需要增加额外的参数。
- 为下述程序增加声明。你能让它们变快多少?
(a) 在 5.7 节中的日期运算代码。
(b) 在 9.8 节中的光线跟踪器 (ray-tracer)。
- 重写 3.15 节中的广度优先搜索的代码让它尽可能减少使用构造。
- 使用存储池修改 4.7 节中的二叉搜索的代码。
脚注
[1] | 较早的实现或许不提供 declaim ;需要使用 proclaim 并且引用这些参量 (quote the argument)。 |
[2] | 为了让内联声明 (inline declaration) 有效,你同时必须设置编译参数,告诉它你想获得最快的代码。 |
[3] | 有两种方法可以描述 Lisp 声明类型 (typing) 的方式:从类型信息被存放的位置或者从它被使用的时间。显示类型 (manifest typing) 的意思是类型信息与数据对象 (data objects) 绑定,而运行时类型(run-time typing) 的意思是类型信息在运行时被使用。实际上,两者是一回事儿。 |