map y filter en Clojure
Conteos de aves avistadas pasados por map, filter y mapv.
;; map applies a function to every element and returns a lazy seq
(def counts [3 12 7 20 5])
(println (map #(* 2 %) counts))
;; filter keeps the elements a predicate says yes to
(println (filter #(> % 6) counts))
(def sightings
[{:species "junco" :count 12 :banded? true}
{:species "siskin" :count 3 :banded? false}
{:species "towhee" :count 20 :banded? true}])
;; a keyword is a function of a map, so it works as the mapped fn
(println (map :species sightings))
;; mapv is eager and hands back a vector instead of a lazy seq
(def flock-sizes (mapv :count sightings))
(println flock-sizes (map :species (filter :banded? sightings)))
Cómo funciona
(map #(* 2 %) counts)aplica una función a cada elemento y devuelve un seq perezoso.(filter #(> % 6) counts)conserva solo los elementos que el predicado acepta.(map :species sightings)usa un keyword como función mapeada, ymapvdevuelveflock-sizescomo vector.
Palabras clave y builtins usados aquí
deffiltermapprintln
El intento, en números
- Líneas
- 18
- Caracteres a escribir
- 636
- Tokens
- 101
- Ritmo de tres estrellas
- 70 tpm
Al ritmo de tres estrellas de 70 tokens por minuto, este intento toma unos 87 segundos.
Paso 1 de 3 en Secuencias; paso 13 de 27 en Fundamentos del lenguaje.