Chapter 12 练习 (Exercises)

  1. 画三个不同的树,能够被打印成 ((A) (A) (A)) 。写一个表达式来生成它们。
  2. 假设 make-queueenqueuedequeue 是按照图 12.7 中的定义,用箱子表式法画出下面每一步所得到的队列的结构图:
  1. > (setf q (make-queue))
  2. (NIL)
  3. > (enqueue 'a q)
  4. (A)
  5. > (enqueue 'b q)
  6. (A B)
  7. > (dequeue q)
  8. A
  1. 定义一个函数 copy-queue ,可以返回一个 queue 的拷贝。
  2. 定义一个函数,接受两个输入参数 objectqueue ,能将 object 插入到 queue 的首端。
  3. 定义一个函数,接受两个输入参数 objectqueue,能具有破坏性地将 object 的第一个实例 ( eql 等价地) 移到 queue 的首端。
  4. 定义一个函数,接受两个输入参数 objectlst ( lst 可能是 cdr-circular 列表),如果 objectlst 的成员时返回真。
  5. 定义一个函数,如果它的参数是一个 cdr-circular 则返回真。
  6. 定义一个函数,如果它的参数是一个 car-circular 则返回真。

脚注

[1]比如,在 Common Lisp 中,修改一个被用作符号名的字符串被认为是一种错误,因为内部的定义并没声明它是从参数复制来的,所以必须假定修改传入内部的任何参数中的字符串来创建新的符号是错误的。
[2]函数名称中 n 的含义是 “non-consing”。一些具有破坏性的函数以 n 开头。