2.15 类型 (Types)

Lisp 处理类型的方法非常灵活。在很多语言里,变量是有类型的,得声明变量的类型才能使用它。在 Common Lisp 里,数值才有类型,而变量没有。你可以想像每个对象,都贴有一个标明其类型的标签。这种方法叫做显式类型manifest typing)。你不需要声明变量的类型,因为变量可以存放任何类型的对象。

虽然从来不需要声明类型,但出于效率的考量,你可能会想要声明变量的类型。类型声明在第 13.3 节时讨论。

Common Lisp 的内置类型,组成了一个类别的层级。对象总是不止属于一个类型。举例来说,数字 27 的类型,依普遍性的增加排序,依序是 fixnumintegerrationalrealnumberatomt 类型。(数值类型将在第 9 章讨论。)类型 t 是所有类型的基类(supertype)。所以每个对象都属于 t 类型。

函数 typep 接受一个对象和一个类型,然后判定对象是否为该类型,是的话就返回真:

  1. > (typep 27 'integer)
  2. T

我们会在遇到各式内置类型时来讨论它们。