9.1 类型 (Types)

Common Lisp 提供了四种不同类型的数字:整数、浮点数、比值与复数。本章所讲述的函数适用于所有类型的数字。有几个不能用在复数的函数会特别说明。

整数写成一串数字:如 2001 。浮点数是可以写成一串包含小数点的数字,如 253.72 ,或是用科学表示法,如 2.5372e2 。比值是写成由整数组成的分数:如 2/3 。而复数 a+bi 写成 #c(a b) ,其中 ab 是任两个类型相同的实数。

谓词 integerpfloatp 以及 complexp 针对相应的数字类型返回真。图 9.1 展示了数值类型的层级。

../_images/Figure-9.1.png

图 9.1: 数值类型

要决定计算过程会返回何种数字,以下是某些通用的经验法则:

  1. 如果数值函数接受一个或多个浮点数作为参数,则返回值会是浮点数 (或是由浮点数组成的复数)。所以 (+ 1.0 2) 求值为 3.0 ,而 (+ #c(0 1.0) 2) 求值为 #c(2.0 1.0)
  2. 可约分的比值会被转换成最简分数。所以 (/ 10 2) 会返回 5
  3. 若计算过程中复数的虚部变成 0 时,则复数会被转成实数 。所以 (+ #c(1 -1) #c(2 1)) 求值成 3

第二、第三个规则可以在读入参数时直接应用,所以:

  1. > (list (ratiop 2/2) (complexp #c(1 0)))
  2. (NIL NIL)