(defn sort-map-by-value
"Given a map return a sorted map, in which the sort is done on the map's values, instead of keys.
Takes a function as an input, which will be used for sorting"
[cf kf]
(fn [m]
(->> m
map-invert
(into (sorted-map-by #(cf (kf %1) (kf %2))))
map-invert)))
(defn date-time-comparator
"Predicate function for comparing two date-time's"
[time1 time2]
(before? time1 time2))
(defn get-time-value
"Function for extracting the date-time from the value of the given map."
[v]
(-> v first :time))
(def sort-map-by-date (sort-map-by-value date-time-comparator get-time-value))
(sort-map-by-date {"3-19-2013" [{:time (date-time 2013 3 19 12 14 45)}]
"3-9-2013" [{:time (date-time 2013 3 9 16 46 49)}]
"2-25-2013" [{:time (date-time 2013 2 25 2 38 15)}]
"3-14-2013" [{:time (date-time 2013 3 14 7 19 23)}]
"2-8-2013" [{:time (date-time 2013 2 8 12 44 47)}]
})
我想了解什麼是使用高階函數的慣用模式。專門用於返回函數的函數。第一個函數sort-map-by-value以2個fns作爲參數,並返回一個將地圖作爲參數的函數。習慣使用情況FUNC返回一個FUNC
上面的函數還可以將所有三個函數和地圖作爲參數。因此,在這種情況下,不需要創建一個可以返回另一個func的函數。什麼是需要的情況。或者換句話說,引入一個返回函數的函數的慣用模式是什麼?