Lisp 为什么不是';难道没有布尔谓词吗?

Lisp 为什么不是';难道没有布尔谓词吗?,lisp,common-lisp,Lisp,Common Lisp,要检查符号,可以使用symbolp。要检查数字,可以使用numberp。等等 为什么没有booleanp来检查布尔值?我当然可以用 (defun booleanp (x) (or (null x) (equal x t))) 但是有没有一种更简单(内置)的方法?如果没有,是否有特殊原因,为什么只缺少这个谓词?我不知道numberp、symbolp、布尔类型和其他类型谓词的确切历史,但是由于通用类型谓词typep的可用性,没有必要为每种类型都使用单独的谓词。查看某个对象是否属于布

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

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

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

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

我不知道
numberp
symbolp
、布尔类型和其他类型谓词的确切历史,但是由于通用类型谓词
typep
的可用性,没有必要为每种类型都使用单独的谓词。查看某个对象是否属于
布尔类型的一个简单方法是
(typep object'boolean)
,我敢猜测,造成这种情况的真正原因是,即使只有
NIL
T
(typep'boolean)
,任何值都是有效的布尔表达式。即,除
NIL
之外的任何值在
IF
形式中均视为真。因此,
BOOLEANP
的有用性将是有限的,如果不是有害的,因为它将返回false(对于条件形式的完全有效的输入)。

布尔是一种实际类型,还是仅仅是一种如何解释其他类型的约定?我不确定我是否正确理解了你的问题(可能不是),但因为
(t类型)
返回
布尔值
我认为它是实际类型。不是吗?OTOH
nil
当然不是
boolean
类型,因为它相当于空列表。布尔是一种类型。请参见,NIL是布尔类型。它也是列表类型。一个对象可能有多种类型。考虑1:它的类型是位、整数和无符号字节。