На сайте clojuredocs.com есть пример cat
(into [] (comp cat cat (map inc)) [[[1] [2]] [[3] [4]]])
Как я знаю, comp применяет fn слева направо, но приведенный выше пример, кажется, применяется справа налево.Как я могу это прочитать?
comp
Краткий ответ: comp -ing преобразователи запускает их в основном слева направо.
Сверху документы:
Преобразователи составляют обычныефункция композиции.Преобразователь выполняет свою работу, прежде чем решить, следует ли и сколько раз вызывать преобразователь, который он оборачивает.Рекомендуемый способ составления преобразователей - с использованием существующей функции comp: (def xf (comp (filter odd?) (map inc) (take 5))) Преобразователь xf - это стек преобразований, который будет применен процессом к ряду входных элементов.Каждая функция в стеке выполняется перед операцией, которую она упаковывает. Композиция преобразователя работает справа налево, но создает стек преобразования, который работает слева направо (фильтрация происходит перед отображением в этом примере) . Как мнемоника, помните, чтоупорядочение функций преобразователя в comp соответствует порядку преобразования последовательности в - >>.Преобразование выше эквивалентно преобразованию последовательности: (->> coll (filter odd?) (map inc) (take 5))
Преобразователи составляют обычныефункция композиции.Преобразователь выполняет свою работу, прежде чем решить, следует ли и сколько раз вызывать преобразователь, который он оборачивает.Рекомендуемый способ составления преобразователей - с использованием существующей функции comp:
(def xf (comp (filter odd?) (map inc) (take 5)))
Преобразователь xf - это стек преобразований, который будет применен процессом к ряду входных элементов.Каждая функция в стеке выполняется перед операцией, которую она упаковывает. Композиция преобразователя работает справа налево, но создает стек преобразования, который работает слева направо (фильтрация происходит перед отображением в этом примере) .
Как мнемоника, помните, чтоупорядочение функций преобразователя в comp соответствует порядку преобразования последовательности в - >>.Преобразование выше эквивалентно преобразованию последовательности:
(->> coll (filter odd?) (map inc) (take 5))
«Секрет» заключается в функции comp, которая применяет функции справа налево, а для преобразователей - слева направо .
Поскольку вы преобразуете, (comp cat cat (map inc)) похоже на (fn [xs] (map inc (sequence cat (sequence cat xs)))) (обратите внимание, что нет версии cat, которая принимает колл)
(comp cat cat (map inc))
(fn [xs] (map inc (sequence cat (sequence cat xs))))
cat