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类型)
返回布尔值
我认为它是实际类型。不是吗?OTOHnil
当然不是boolean
类型,因为它相当于空列表。布尔是一种类型。请参见,NIL是布尔类型。它也是列表类型。一个对象可能有多种类型。考虑1:它的类型是位、整数和无符号字节。