Возможно, есть более элегантный способ сделать то, что вы хотите, но вот, по крайней мере, более общую версию:
(defn delayed [reducer & fs]
(apply reducer (for [f fs] (if (fn? f) (f) f))))
(def a-fn (partial delayed +))
Так что delayed
принимает произвольную функцию и список функций /ценности.Если развернуть все аргументы, а затем применить функцию к ним.Затем мы используем partial
, чтобы определить a-fn
, используя +
:
user=> (a-fn 1 2)
3
user=> (a-fn (constantly 1) 2)
3
user=> (a-fn (constantly 1) 2 4)
7
В качестве альтернативы, delayed
может иметь смысл возвращать функцию вместо использования частичного.Обратите внимание, что лучше.
Имя лучше, чем "задержано" приветствуется:)