2012-07-04 32 views
1

我打某種與解構精神障礙的......從一組的有序集合

(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}) 

的工作,但事實並非如此。

我想知道如何做到這一點,它甚至會更好,如果你能解釋一下爲什麼我的推理方式是假的......

回答

6

排序設置功能參數是一個變種 - 精氨酸: [&鍵],這意味着,如果你有一個收集和你要調用該函數,你需要使用類似的應用功能:

user=> (def v [4 8 2]) 
#'user/v 
user=> (apply sorted-set v) 
#{2 4 8} 

的函數,它接受一個集合,並返回一個sorted-簽名設置將如下所示:

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)) 

請注意,如果你定義一個變種,arg參數的功能,您將需要使用適用於既調用函數又創建分類集:

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