Estoy aprendiendo Clojure y estoy tratando de definir una función que tome un número variable de parámetros (una función variada ) y los resuma (sí, como el procedimiento +). Sin embargo, no sé cómo implementar dicha función.
Todo lo que puedo hacer es:
(defn sum [n1, n2] (+ n1 n2))
Por supuesto, esta función toma dos parámetros y solo dos parámetros. Enséñame cómo hacer que acepte (y procese) un número indefinido de parámetros.
seq
a su función de suma? Por ejemplo: (sum '(1 2 3)) y el resultado es 6?&
de cualquiera de las versionesdef fn(*args): pass
), puedo llamarla dando una lista como fn (* list_of_args). ¿Puedo hacer lo mismo en clojure?def fn(*args): pass
no sería,fn([1,2,3])
perofn(1,2,3)
(obviamente, dependiendo de lo que quieras hacer exactamente, pero estoy tratando de seguir el espíritu aquí)Yehoanathan menciona la sobrecarga de aridad pero no proporciona un ejemplo directo. Esto es de lo que está hablando:
(defn special-sum ([] (+ 10 10)) ([x] (+ 10 x)) ([x y] (+ x y)))
(special-sum)
=>20
(special-sum 50)
=>60
(special-sum 50 25)
=>75
fuente
(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)) )
fuente
De http://clojure.org/functional_programming
fuente
(defn sum [& args] (print "sum of" args ":" (apply + args)))
Esto toma cualquier número de argumentos y los suma.
fuente