読者です 読者をやめる 読者になる 読者になる

SBCLで配列に対するsxhash関数呼び出しが常に同じ値を返す

sbcl

sbcl(1.0.43)では、配列に対するsxhash関数は常に同じ値を返すようだ。

;;;; sbcl-1.0.43
;; 一次元配列
(sxhash #())
--> 518591303

(sxhash #(a 10 "sbcl"))
--> 518591303

(sxhash (make-array 10 :adjustable t :fill-pointer 3))
--> 518591303

(sxhash (make-array 8 :element-type '(unsigned-byte 8) :initial-element 3))
--> 518591303

;; 二次元配列
(sxhash #2A((sbcl)))
--> 518591350

(sxhash #2A((sbcl) (10) (#(1 2 3))))
--> 518591350

;; 文字列: 異なる文字列には異なるハッシュ値
(sxhash "abc")
--> 315105115

(sxhash "sbcl")
--> 91171029

;; ビットベクタ: 異なるビットベクタには異なるハッシュ値
(sxhash #*10100)
--> 203221787

(sxhash #*10101)
--> 203221771

調べてないので分からないけど、equal関数で比較できるかどうかでsxhash関数が有効かどうかが決まっているような気がする。
いずれにせよ配列に対するハッシュ値計算関数は自作しないといけない。