函数的返回值将会被解释成逻辑 或逻辑 时,则称此函数为谓词(predicate)。在 Common Lisp 里,谓词的名字通常以 p 结尾。

    逻辑 在 Common Lisp 里,用 nil ,即空表来表示。如果我们传给 listp 的实参不是列表,则返回 nil

    1. > (listp 27)
    2. NIL

    由于 nil 在 Common Lisp 里扮演两个角色,如果实参是一个空表,则函数 null 返回

    1. T

    nullnot 做的是一样的事情。

    在 Common Lisp 里,最简单的条件式是 if 。通常接受三个实参:一个 test 表达式,一个 then 表达式和一个 else 表达式。若 test 表达式求值为逻辑 ,则对 then 表达式求值,并返回这个值。若 test 表达式求值为逻辑 ,则对 else 表达式求值,并返回这个值:

    quote 相同, if 是特殊的操作符。不能用函数来实现,因为实参在函数调用时永远会被求值,而 if 的特点是,只有最后两个实参的其中一个会被求值。 if 的最后一个实参是选择性的。如果忽略它的话,缺省值是 :

    1. > (if (listp 27)
    2. NIL

    逻辑操作符 andor 与条件式类似。两者都接受任意数量的实参,但仅对能影响返回值的几个实参求值。如果所有的实参都为 (即非 nil ),那么 and 会返回最后一个实参的值:

    1. > (and t (+ 1 2))

    如果其中一个实参为 ,那之后的所有实参都不会被求值。 or 也是如此,只要碰到一个为 的实参,就停止对之后所有的实参求值。

    以上这两个操作符称为。宏和特殊的操作符一样,可以绕过一般的求值规则。第十章解释了如何编写你自己的宏。