Scooter Asked: 2024-11-22 01:22:36 +0800 CST2024-11-22 01:22:36 +0800 CST 2024-11-22 01:22:36 +0800 CST 为什么 SBCL Common Lisp 中的 listp 对非列表 cons 单元返回 T? 772 全局变量a是一个 cons 单元,但不是列表。为什么 LISTP 会为其返回 T? * (defvar a (cons 1 2)) A * a (1 . 2) * (listp a) T common-lisp 1 个回答 Voted Best Answer Barmar 2024-11-22T01:47:11+08:002024-11-22T01:47:11+08:00 来自CLHS 如果对象是类型,则返回 true list;否则,返回 false。 该类型的定义list是: 类型cons和null构成类型的详尽划分list。 因为(1 . 2)是cons,所以它也是list。 (listp object) == (typep object 'list) == (typep object '(or cons null)) 为了提高效率,listp不会尝试确定它是否是一个以 结尾的正确NIL列表。没有标准函数可以执行此操作。请参阅在 Common Lisp 中检查正确列表
来自CLHS
该类型的定义
list
是:因为
(1 . 2)
是cons
,所以它也是list
。为了提高效率,
listp
不会尝试确定它是否是一个以 结尾的正确NIL
列表。没有标准函数可以执行此操作。请参阅在 Common Lisp 中检查正确列表