2017-12-03 203 views
0

創建傳感器我怎麼會從以下普通代碼,其中comboclojure.math.combinatorics別名創建一個轉換器:普通代碼

(defn row->evenly-divided [xs] 
    (->> (combo/combinations (sort-by - xs) 2) 
     (some (fn [[big small]] 
       (assert (>= big small)) 
       (let [res (/ big small)] 
       (when (int? res) 
        res)))))) 

正如評論指出的換能器只適用於處理每個項目。有了這一點,我已經通過改變排序使代碼變得更加友好,因此現在每個項目都已經完成了。然而,我不認爲有什麼可以做的關於組合部分!

(defn row->evenly-divided [xs] 
    (->> (combo/combinations xs 2) 
     (some (fn [xy] 
       (let [res (apply/(sort-by - xy))] 
       (when (int? res) 
        res)))))) 
+1

我認爲這是一個有點尷尬適用於此換能器,如果你想將所有'combinations'一步,'sort'步驟和「均分」步驟進入一個過程。要創建組合並對其進行排序,需要遍歷整個列表並與其他項目配對。傳感器假設每個物品在累積之前都被單獨處理。除此之外,國際海事組織,這裏的「一些」在性能方面表現完美。 –

回答

0

這是相同的功能,但具有引入的傳感器:

(def x-row->evenly-divided (comp 
          (map (partial sort-by -)) 
          (map (partial apply /)) 
          (filter int?))) 

(defn row->evenly-divided-2 [xs] 
    (->> (combo/combinations xs 2) 
     (sequence x-row->evenly-divided) 
     first)) 
相關問題