Если вы еще не видели его, обязательно добавьте в закладки The Clojure CheatSheet .
Нажав на partition-by
, вы получите ClojureDocs.org с хорошей информацией и примерами.
Нажмите в верхнем правом углу, чтобы увидеть исходный код Clojure .Посмотрите на 2-ую арность, которая принимает функцию f
и коллекцию coll
:
([f coll]
(lazy-seq
(when-let [s (seq coll)]
(let [fst (first s)
fv (f fst)
run (cons fst (take-while #(= fv (f %)) (next s)))]
(cons run (partition-by f (seq (drop (count run) s))))))))
Итак, fst
- первый элемент в коллекции, а fv
- преобразованное значение с использованиемфункция f
.Затем он потребляет все элементы, которые соответствуют fv
, после чего он возвращается с первым несовпадающим элементом.