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, ответ здесь.

Другие вопросы по тегам