要检查符号,可以使用symbolp
。要检查号码,可以使用numberp
。等等...
为什么没有booleanp
来检查布尔值?我当然可以使用
(defun booleanp (x)
(or (null x)
(equal x t)))
但是有更简单的(内置)方式吗?如果没有,是否有特殊原因,为什么这个谓词丢失?
答案 0 :(得分:13)
我不知道numberp
,symbolp
,布尔类型和其他类型谓词的确切历史记录,但是它具有泛型类型谓词typep
的可用性没有必要为每种类型都有一个单独的谓词。查看某些内容属于boolean
类型的简短方法是(typep object 'boolean)
。
答案 1 :(得分:2)
我敢于猜测,真正的原因是即使只有NIL
和T
是(TYPEP 'BOOLEAN)
,任何值都是有效的布尔表达式。即除NIL
之外的任何值在IF
形式中都被视为true。因此,BOOLEANP
的有用性将受到限制,如果没有害处,因为它会对条件形式的完全有效输入返回false。