В общем, некоммутативный случай, который вы можете использовать apply :
(defn sum [& args] (apply + args))
Поскольку сложение является коммутативным, должно работать и что-то подобное:
(defn sum [& args] (reduce + args))
&
заставляет args
быть привязанным к остальной части списка аргументов (в данном случае это весь список, поскольку слева от &
нет ничего).
Очевидно, что определение такой суммы не имеет смысла, поскольку вместо:
(sum a b c d e ...)
Вы можете просто написать:
(+ a b c d e ....)