Clojure 从集合到排序集合

Clojure 从集合到排序集合,clojure,destructuring,Clojure,Destructuring,我遇到了一些与破坏有关的心理障碍 (sorted-set 4 2 5) 给出: #{2 4 5} 但我如何从中获得相同的排序集: ((fn [???] (sorted-set ???)) [4 2 5]) 或来自作为参数传递的集合(未排序): ((fn [???] (sorted-set ???)) #{4 2 5}) 我尝试了几次解构,我想: ((fn [#{elems}] (sorted-set elems)) #{4 2 5}) 这样做是可行的,但事实并非如此 我想知道如何做

我遇到了一些与破坏有关的心理障碍

(sorted-set 4 2 5)
给出:

#{2 4 5}
但我如何从中获得相同的排序集:

((fn [???] (sorted-set ???)) [4 2 5])
或来自作为参数传递的集合(未排序):

((fn [???] (sorted-set ???)) #{4 2 5})  
我尝试了几次解构,我想:

((fn [#{elems}] (sorted-set elems)) #{4 2 5})
这样做是可行的,但事实并非如此


我想知道如何做到这一点,如果你能解释为什么我的推理方式是假的,那就更好了…

排序集函数param是一个var arg:[&keys],这意味着如果你有一个集合,你想调用该函数,你需要使用apply函数,比如:

user=> (def v [4 8 2])
#'user/v
user=> (apply sorted-set v)
#{2 4 8}
接受集合并返回排序集的函数的签名如下:

user=> (defn to-ss [c] (apply sorted-set c))
#'user/to-ss
user=> (to-ss v)
#{2 4 8}
您还可以创建一个空的排序集,然后将集合的所有元素添加到其中:

(defn to-ss [c] (into (sorted-set) c))
请注意,如果要使用var arg参数定义函数,则需要使用apply调用函数并创建排序集:

user=> (defn to-ss [& items] (apply sorted-set items))
#'user/to-ss
user=> (apply to-ss v)
#{2 4 8} <-- expected value
user=> (to-ss v)
#{[4 8 2]} <-- sorted-set with just one value
user=>(定义到ss[&items](应用已排序的集合项))
#'user/to-ss
用户=>(适用于ss v)
#{2 4 8}(对ss v)

#{[4 8 2]}排序集函数param是一个var arg:[&keys],这意味着如果您有一个集合,并且您想要调用该函数,那么您需要使用如下应用函数:

user=> (def v [4 8 2])
#'user/v
user=> (apply sorted-set v)
#{2 4 8}
接受集合并返回排序集的函数的签名如下:

user=> (defn to-ss [c] (apply sorted-set c))
#'user/to-ss
user=> (to-ss v)
#{2 4 8}
您还可以创建一个空的排序集,然后将集合的所有元素添加到其中:

(defn to-ss [c] (into (sorted-set) c))
请注意,如果要使用var arg参数定义函数,则需要使用apply调用函数并创建排序集:

user=> (defn to-ss [& items] (apply sorted-set items))
#'user/to-ss
user=> (apply to-ss v)
#{2 4 8} <-- expected value
user=> (to-ss v)
#{[4 8 2]} <-- sorted-set with just one value
user=>(定义到ss[&items](应用已排序的集合项))
#'user/to-ss
用户=>(适用于ss v)
#{2 4 8}(对ss v)
#{[4 8 2]}