为什么 SBCL Common Lisp 中的 listp 对于非列表 cons 单元返回 T?

问题描述 投票:0回答:1

全局变量a是一个cons单元,但不是一个列表。为什么 LISTP 返回 T?

* (defvar a (cons 1 2))
A
* a
(1 . 2)
* (listp a)
T
common-lisp predicate sbcl
1个回答
0
投票

来自CLHS

如果对象的类型为

list
,则返回 true;否则,返回 false。

类型

list
的定义是:

类型

cons
null
形成类型
list
的详尽划分。

因为

(1 . 2)
cons
,所以它也是
list

(listp object) == (typep object 'list) == (typep object '(or cons null))

为了提高效率,

listp
不会尝试确定它是否是一个以NIL结尾的
正确
列表。没有标准函数可以执行此操作。请参阅 检查 Common Lisp 中的正确列表

© www.soinside.com 2019 - 2024. All rights reserved.