Chapter 6 练习 (Exercises)

  1. 定义一个 tokens 版本 (67 页),接受 :test:start 参数,缺省分别是 #'constituent0 。(译注: 67 页在 4.5 小节)
  2. 定义一个 bin-search (60 页)的版本,接受 :key , :test , startend 参数,有着一般的意义与缺省值。(译注: 60 页在 4.1 小节)
  3. 定义一个函数,接受任何数目的参数,并返回传入的参数。
  4. 修改 most 函数 (105 页),使其返回 2 个数值,一个列表中最高分的两个元素。(译注: 105 页在 6.4 小节)
  5. filter (105 页) 来定义 remove-if (没有关键字)。(译注: 105 页在 6.4 小节)
  6. 定义一个函数,接受一个参数丶一个数字,并返回目前传入参数中最大的那个。
  7. 定义一个函数,接受一个参数丶一个数字,若传入参数比上个参数大时,返回真。函数第一次调用时应返回 nil
  8. 假设 expensive 是一个接受一个参数的函数,一个介于 0 至 100 的整数(包含 100),返回一个耗时的计算结果。定义一个函数 frugal 来返回同样的答案,但仅在没见过传入参数时调用 expensive
  9. 定义一个像是 apply 的函数,但在任何数字印出前,缺省用 8 进制印出。

脚注

[1]在这个情况下, nreverse (在 222 页描述)和 reverse 做一样的事情,但更有效率。
[2]“闭包”这个名字是早期的 Lisp 方言流传而来。它是从闭包需要在动态作用域里实现的方式衍生而来。
[3]以前的 ANSI Common Lisp, compile 的第一个参数也不能是一个已经编译好的函数。