PersistentQueue实现了Sequential但没有实现java.util.List。列表形成一个等价分割,Sequential也是如此。这意味着你可能会得到非传递性等价
(def q (conj clojure.lang.PersistentQueue/EMPTY 1 2 3)) ;=> #user/q (def al (doto (java.util.ArrayList.) (.add 1) (.add 2) (.add 3))) ;=> #user/al (def v [1 2 3]) ;=> #user/v (= al v) ;=> true (= v q) ;=> true (not= al q) ;=> true
这是因为PersistentQueue是一个Sequential但不是一个列表,ArrayList是一个列表但不是一个Sequential,而PersistentVector两者都是。