所以,我试图通过勇敢的Clojure工作。第三个练习是创建一个map函数,但不是返回一个列表,而应该返回一个集合。好的,所以我去了:Clojure奇怪的订单集
(defn mapset
[f lst]
(loop [[head & remaining] lst
final-set #{}]
(if (empty? remaining)
(into final-set #{(f head)})
(recur remaining
(into final-set #{(f head)})))))
但是然后发生了一些奇怪的事情。该功能的作品,种类。但是这些订单都搞乱了。我知道,在数学的顺序套是无关紧要的,但我不能想保持为什么会这样:
clojure-noob.core=> (mapset identity [1])
#{1}
clojure-noob.core=> (mapset identity [1 2])
#{1 2}
clojure-noob.core=> (mapset identity [1 2 3])
#{1 3 2}
clojure-noob.core=> (mapset identity [1 2 3 4])
#{1 4 3 2}
clojure-noob.core=> (mapset identity [1 2 3 4 5])
#{1 4 3 2 5}
clojure-noob.core=> (mapset identity [1 2 3 4 5 6])
#{1 4 6 3 2 5}
这不仅是身份的功能,无论是。
clojure-noob.core=> (mapset inc [1 2 3])
#{4 3 2}
这里发生了什么?
'#{}''创建散列set',如果你想要有序集合,可以使用'sorted-set' http://clojure.org/reference/data_structures#Sets – ymonad