标签: common-lisp
在普通的lisp中,我们有:
(equal (vector 2 3 4) (vector 2 3 4)) = NIL (equal (cons 1 2) (cons 1 2)) => T
为什么第一个是假的,第二个是真的?
答案 0 :(得分:9)
来自Common Lisp Hyperspec:
对于 conses ,等于是递归定义的,因为两个汽车 相等且两个 cdrs 相等。 两个数组只有在 eq 时相等,但有一个例外: strings 和位元素逐个元素进行比较(使用 eql )。
对于 conses ,等于是递归定义的,因为两个汽车 相等且两个 cdrs 相等。
两个数组只有在 eq 时相等,但有一个例外: strings 和位元素逐个元素进行比较(使用 eql )。
vector创建一个数组,但它不是字符串或位向量。由于这两个数组不是eq,因此它们不是equal。
vector
eq
equal
如果您想要一个比较谓词,如果数组具有所有相同的元素,则将数组视为等效数组,请使用equalp
equalp