Проблема в том, как используются varargs. my-juxt
имеет параметры [& fns]
, в то время как ему дано [fns]
в последней строке. То же самое относится и к функции, которую она возвращает в результате: она ожидает [& a]
при условии [a]
.
Код ниже будет работать (обратите внимание на два дополнительных apply
там)
(defn my-juxt
[& fns]
(if (= 1 (count fns))
(fn [& a] (list (apply (first fns) a)))
(fn [& a]
(cons (apply (first fns) a)
(apply (apply my-juxt (rest fns)) a)))))