为什么没有 BOOLEANP 谓词?
Why isn't there a BOOLEANP predicate?
要检查符号,可以使用 symbolp
。要检查数字,可以使用 numberp
。等等……
为什么没有 booleanp
检查布尔值?我当然可以用
(defun booleanp (x)
(or (null x)
(equal x t)))
但是有没有更简单的(内置的)方法来做到这一点?如果不是,是否有特殊原因,为什么只缺少 this 谓词?
我不知道 numberp
、symbolp
、布尔类型和其他类型谓词的确切历史,但是随着通用类型谓词的可用性 typep
它没有必要为每种类型都有一个单独的谓词。查看某物是否属于 boolean
类型的一种简短方法是 (typep object 'boolean)
.
我敢猜测,真正的原因是尽管只有 NIL
和 T
是 (TYPEP 'BOOLEAN)
,但任何值都是有效的布尔表达式。 IE。除了 NIL
之外的任何值在 IF
形式中都被认为是真实的。因此,BOOLEANP
的用处即使没有危害也会受到限制,因为对于条件形式的完全有效输入的事物来说 return false。
要检查符号,可以使用 symbolp
。要检查数字,可以使用 numberp
。等等……
为什么没有 booleanp
检查布尔值?我当然可以用
(defun booleanp (x)
(or (null x)
(equal x t)))
但是有没有更简单的(内置的)方法来做到这一点?如果不是,是否有特殊原因,为什么只缺少 this 谓词?
我不知道 numberp
、symbolp
、布尔类型和其他类型谓词的确切历史,但是随着通用类型谓词的可用性 typep
它没有必要为每种类型都有一个单独的谓词。查看某物是否属于 boolean
类型的一种简短方法是 (typep object 'boolean)
.
我敢猜测,真正的原因是尽管只有 NIL
和 T
是 (TYPEP 'BOOLEAN)
,但任何值都是有效的布尔表达式。 IE。除了 NIL
之外的任何值在 IF
形式中都被认为是真实的。因此,BOOLEANP
的用处即使没有危害也会受到限制,因为对于条件形式的完全有效输入的事物来说 return false。