typestar

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

  1. (map #(* 2 %) counts) aplica una función a cada elemento y devuelve un seq perezoso.
  2. (filter #(> % 6) counts) conserva solo los elementos que el predicado acepta.
  3. (map :species sightings) usa un keyword como función mapeada, y mapv devuelve flock-sizes como vector.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 1 de 3 en Secuencias; paso 13 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →