Я изучаю Clojure и пытаюсь определить функцию, которая принимает переменное количество параметров ( вариативная функция) и суммирует их (да, точно так же, как процедура +). Однако я не знаю, как реализовать такую функцию.
Все, что я могу сделать, это:
(defn sum [n1, n2] (+ n1 n2))
Конечно, эта функция принимает два параметра и только два параметра. Пожалуйста, научите меня, как заставить его принимать (и обрабатывать) неопределенное количество параметров.
seq
в вашу функцию суммы. Например: (sum '(1 2 3)) и результат 6?&
из любой версииdef fn(*args): pass
), я могу вызвать ее, указав список, например fn (* list_of_args). Могу ли я сделать то же самое в clojure?def fn(*args): pass
не будет ,fn([1,2,3])
ноfn(1,2,3)
(очевидно , в зависимости от того, что вы хотите сделать точно, но я стараюсь следовать духу здесь)Иехоанатан упоминает перегрузку арности, но не приводит прямых примеров. Вот о чем он говорит:
(defn special-sum ([] (+ 10 10)) ([x] (+ 10 x)) ([x y] (+ x y)))
(special-sum)
=>20
(special-sum 50)
=>60
(special-sum 50 25)
=>75
источник
(fn ([] (+ 10 10)) ([x] (+ 10 x)) ([x y] (+ x y)))
(defn my-sum ([] 0) ; no parameter ([x] x) ; one parameter ([x y] (+ x y)) ; two parameters ([x y & more] ; more than two parameters (reduce + (my-sum x y) more)) )
источник
С http://clojure.org/functional_programming
источник
(defn sum [& args] (print "sum of" args ":" (apply + args)))
Это берет любое количество аргументов и складывает их.
источник