Pregunta ¿Cómo hacer que una función Clojure tome una cantidad variable de parámetros?


Estoy aprendiendo Clojure y estoy tratando de definir una función que tome una cantidad variable de parámetros (un variad función) y resumirlos (sí, al igual que el procedimiento +). Sin embargo, no sé cómo implementar tal función

Todo lo que puedo hacer es:

(defn sum [n1, n2] (+ n1 n2))

Por supuesto, esta función requiere dos parámetros y dos parámetros solamente. Por favor, enséñeme cómo hacer que acepte (y procese) un número indefinido de parámetros.


73
2018-02-11 17:43


origen


Respuestas:


En general, caso no conmutativo que puedes usar aplicar:

(defn sum [& args] (apply + args))

Como la adición es conmutativa, algo así debería funcionar también:

(defn sum [& args] (reduce + args))

&  causas args estar obligado al resto de la lista de argumentos (en este caso la lista completa, ya que no hay nada a la izquierda de &)

Obviamente, definir suma así no tiene sentido, ya que en lugar de:

(sum a b c d e ...)

usted puede simplemente escribir:

(+ a b c d e ....)

95
2018-02-11 18:09



Yehoanathan menciona la sobrecarga de arity, 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


28
2018-02-20 03:09



 (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))
  )

16
2017-10-25 23:47



defn es una macro que hace que las funciones de definición sean un poco más simples.   Clojure admite la sobrecarga arity en un solo objeto de función,   autorreferencia, y funciones de aria variable usando &

De http://clojure.org/functional_programming


10
2018-02-11 18:56



(defn sum [& args]
  (print "sum of" args ":" (apply + args)))

Esto toma cualquier cantidad de argumentos y los suma.


3
2017-07-23 12:32