错误声明 (Misdeclarations)

第十三章解释了如何给变量及数据结构做类型声明。通过给变量做类型声明,你保证变量只会包含某种类型的值。当产生代码时,Lisp 编译器会依赖这个假定。举例来说,这个函数的两个参数都声明为 double-floats

  1. (defun df* (a b)
  2. (declare (double-float a b))
  3. (* a b))

因此编译器在产生代码时,被授权直接将浮点乘法直接硬连接 (hard-wire)到代码里。

如果调用 df* 的参数不是声明的类型时,可能会捕捉一个错误,或单纯地返回垃圾。在某个实现里,如果我们传入两个定长数,我们获得一个硬体中断:

  1. > (df* 2 3)
  2. Error: Interrupt.

如果获得这样严重的错误,通常是由于数值不是先前声明的类型。