2个向量之间的比较(相等(向量2 3 4)(向量2 3 4))= NIL

时间:2014-02-05 16:40:45

标签: common-lisp

在普通的lisp中,我们有:

(equal (vector 2 3 4) (vector 2 3 4)) = NIL
(equal (cons 1 2) (cons 1 2)) => T

为什么第一个是假的,第二个是真的?

1 个答案:

答案 0 :(得分:9)

来自Common Lisp Hyperspec

  

对于 conses 等于是递归定义的,因为两个汽车 相等且两个 cdrs 相等

     

两个数组只有在 eq 相等,但有一个例外: strings 位元素逐个元素进行比较(使用 eql )。

vector创建一个数组,但它不是字符串或位向量。由于这两个数组不是eq,因此它们不是equal

如果您想要一个比较谓词,如果数组具有所有相同的元素,则将数组视为等效数组,请使用equalp