为什么没有BOOLEANP谓词?

时间:2015-04-08 16:35:23

标签: lisp common-lisp

要检查符号,可以使用symbolp。要检查号码,可以使用numberp。等等...

为什么没有booleanp来检查布尔值?我当然可以使用

(defun booleanp (x)
  (or (null x)
      (equal x t)))

但是有更简单的(内置)方式吗?如果没有,是否有特殊原因,为什么这个谓词丢失?

2 个答案:

答案 0 :(得分:13)

我不知道numberpsymbolp,布尔类型和其他类型谓词的确切历史记录,但是它具有泛型类型谓词typep的可用性没有必要为每种类型都有一个单独的谓词。查看某些内容属于boolean类型的简短方法是(typep object 'boolean)

答案 1 :(得分:2)

我敢于猜测,真正的原因是即使只有NILT(TYPEP 'BOOLEAN),任何值都是有效的布尔表达式。即除NIL之外的任何值在IF形式中都被视为true。因此,BOOLEANP的有用性将受到限制,如果没有害处,因为它会对条件形式的完全有效输入返回false。