Aridades múltiples en Clojure
Una función de riego con aridad por defecto, más un armador de rótulos variádico.
(require '[clojure.string :as str])
;; two arities: the short one fills in a default and calls the long one
(defn water
([bed] (water bed 2))
([bed liters]
(str "watering " bed " with " liters "L")))
(println (water "tomatoes"))
(println (water "ferns" 5))
;; & gathers the leftover arguments into a seq, or nil when there are none
(defn label [bed & remarks]
(str bed (when (seq remarks)
(str " - " (str/join "; " remarks)))))
(println (label "beans"))
(println (label "beans" "shade cloth" "sow again in June"))
Cómo funciona
([bed] (water bed 2))completa un valor por defecto y llama a la aridad de dos argumentos.- La aridad más larga toma
[bed liters]y arma el mensaje constr. [bed & remarks]junta los argumentos sobrantes en un seq que(seq remarks)revisa antes de unir.
Palabras clave y builtins usados aquí
defnprintlnseqstrwhen
El intento, en números
- Líneas
- 18
- Caracteres a escribir
- 517
- Tokens
- 99
- Ritmo de tres estrellas
- 75 tpm
Al ritmo de tres estrellas de 75 tokens por minuto, este intento toma unos 79 segundos.
Paso 3 de 3 en Funciones; paso 9 de 27 en Fundamentos del lenguaje.