Я написал эту функцию, которая делает это (проще показать, чем объяснить):Какой самый идиоматический способ Clojure написать это?
(split 2 (list 1 2 3 4 5 6))
=> ((1 2) (2 3) (3 4) (4 5) (5 6))
(defn split [n xs]
(if (> (count xs) (dec n))
(cons (take n xs) (split n (rest xs)))
'()))
Я понимаю, что в Clojure список не только первая структура данных класса. Будет ли смысл писать эту структуру данных - агностик? И независимо от того, является ли моя реализация наиболее эффективной, а если нет, как я могу сделать ее более эффективной и/или идиоматичной?
Спасибо!
Уход, спасибо за подсказку. Выполнение этого единственного изменения - подсчет «взять n», а не последовательность - в версию loop/recur сократило время от 3000 мс до 20 мс для диапазона 10 тыс. ...Я должен буду помнить, что next/rest возвращает последовательность, где count - O (n). –