如果计算Clojure映射中'pr-str'的CID,它是唯一的吗?
我想知道Clojure映射在传递给摘要函数时是否可能具有非唯一的哈希。
这取决于散列函数,而不是映射,它是Clojure的事实,或者你使用pr-str
的事实。
按照定义,任何合理的散列函数都是有损函数,因此它始终允许冲突存在,尽管某些散列的冲突概率极低。
我已经在我的代码中写过:one 第一次。
但这是否总是出现在 :two 之前?
哈希集/映射的顺序是未定义的。但是,对于同一对象来说,它是相同的。
然而,即使内容相同,不同对象的位置也可能不同
user=> (mapv hash [0 0.])
[0 0]
user=> (pr-str (hash-map 0 0 0. 0))
"{0 0, 0.0 0}"
user=> (pr-str (hash-map 0. 0 0 0))
"{0.0 0, 0 0}"
如果我运行上述代码,它是否总是返回一个唯一的值?
根据上述内容,这不能保证。对于一个有损函数,如散列函数,从未有过保证。
我想象Clojure映射是带有特殊bind
或>>
操作符的集合,使得调用集合中的一个元素返回该元素绑定的内容。
这似乎与问题的其余部分无关。但是,在这方面,Clojure中的集合或映射并没有什么特殊之处,Clojure没有操作符。
Clojure中的集合和映射,作为其他事物之一,是可以调用的——就是这样简单。