clojure / transducers / comp - реализация - запутано
Цель
Я пытаюсь понять, как преобразователи реализованы.
неразбериха
Я смотрю на comp
, реализуй здесь.
В частности, эти строки здесь:
([] (f (g)))
([x] (f (g x)))
([x y] (f (g x y)))
([x y z] (f (g x y z)))
([x y z & args] (f (apply g x y z args)))))
Теперь, что я не понимаю - почему пять случаев? Может ли это быть переписано как:
(args (f (apply g args)))
?
Есть ли какая-то конкретная причина, почему код был написан, как указано выше?
1 ответ
Решение
Разве это не могло быть переписано как
(args (f (apply g args)))
?
- Да, но это не имеет ничего общего с датчиками.
comp
выполняет функциональную композицию независимо от того, являются ли аргументы функции преобразователями.- Многие основные функции, в том числе
comp
Специализируй простые кейсы на скорость.
На общий вопрос, как отмечает @ClojureMostly, ответ здесь.