Я изучаю clojure, и я написал небольшую функцию, которая с указанием пути к каталогу возвращает отсортированную карту файлов в порядке убывания в соответствии с их mtimes.Вот оно:
(defn get-sorted-mtimes [dir]
(loop [sm (sorted-map-by >)
lst (for [f (.listFiles (File. dir))]
(let [k (.lastModified f)
v (.getName f)]
[k v]))]
(if (seq lst)
(recur (assoc sm ((first lst) 0) ((first lst) 1))
(rest lst))
sm)))
Мой вопрос: есть ли способ передать метод сравнения в качестве имени символа в функцию и сделать его сортировку по порядку asc или desc соответственно?Я имею в виду что-то вроде:
(defn get-sorted-mtimes [dir <sym>]
(loop [sm (sorted-map-by <sym>)
...
Кроме того, есть ли более сомнительный способ выполнения этой задачи?
Ну, для записи, это последняя форма функции, которая делает именно то, что мне нужно:
(defn get-sorted-mtimes [dir comp]
(loop [sm (sorted-map-by (comparator comp))
lst (for [f (.listFiles (File. dir))]
(let [k (.lastModified f)
v (.getName f)]
[k v]))]
(if (seq lst)
(recur (assoc sm ((first lst) 0) ((first lst) 1))
(rest lst))
sm)))
Если функция (компаратор) не используется,получить исключение java.lang.ClassCastException.