为什么没有 BOOLEANP 谓词?

Why isn't there a BOOLEANP predicate?

要检查符号,可以使用 symbolp。要检查数字,可以使用 numberp。等等……

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

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

但是有没有更简单的(内置的)方法来做到这一点?如果不是,是否有特殊原因,为什么只缺少 this 谓词?

我不知道 numberpsymbolp、布尔类型和其他类型谓词的确切历史,但是随着通用类型谓词的可用性 typep 它没有必要为每种类型都有一个单独的谓词。查看某物是否属于 boolean 类型的一种简短方法是 (typep object 'boolean).

我敢猜测,真正的原因是尽管只有 NILT(TYPEP 'BOOLEAN),但任何值都是有效的布尔表达式。 IE。除了 NIL 之外的任何值在 IF 形式中都被认为是真实的。因此,BOOLEANP 的用处即使没有危害也会受到限制,因为对于条件形式的完全有效输入的事物来说 return false。