Un vector en Clojure es una colección secuencial, indexada e inmutable de cero o más valores. Esto significa que una vez que se crea un vector, no se puede modificar. Las funciones que operan sobre vectores devuelven un vector nuevo, mientras que el vector original permanece sin cambios. Los valores de un vector pueden ser de tipos heterogéneos. Los vectores se pueden definir así:
(def empty [])
(def single-value [5])
(def single-value-alternative (vector 5))
(def three-values [1 "a" "b"])
Los elementos se pueden obtener de un vector usando un índice. Los vectores de Clojure están basados en cero, lo que significa que el índice del primer elemento siempre es cero:
(def numbers [2 3 5])
;; Read value from vector
(get numbers 2)
;;=> 5
;; Update value in vector
(assoc numbers 2 9)
;;=> [2 3 9]
El vector original no cambia:
numbers
;;=> [2 3 5]
Para recordar el valor actualizado, necesitamos pasarlo o capturarlo en un var:
(def updated-numbers
(assoc numbers 2 9))
(get updated-numbers 2)
;;=> 9
Eres un observador de aves aficionado que lleva la cuenta de cuántas aves han visitado tu jardín en los últimos siete días.
Tienes seis tareas, todas relacionadas con el número de aves que visitaron tu jardín.
Para poder comparar, siempre tienes a mano una copia de los conteos de la semana pasada, que fueron: 0, 2, 5, 3, 7, 8 y 4. Crea un vector que contenga los conteos de la semana pasada:
last-week
;;=> [0 2 5 3 7 8 4]
Implementa la función today para que devuelva cuántas aves visitaron tu jardín hoy. Los conteos de aves están ordenados por día: el primer elemento es el conteo del día más antiguo y el último es el conteo de hoy.
(def birds-per-day [2 5 0 7 4 1])
(today birds-per-day)
;;=> 1
Implementa la función inc-bird para incrementar el conteo de hoy:
(inc-bird birds-per-day)
;;=> [2 5 0 7 4 2]
Implementa la función predicado day-without-birds?, que devuelve true si hubo un día en el que cero aves visitaron el jardín; de lo contrario, devuelve false:
(day-without-birds? birds-per-day)
;;=> true
Implementa la función n-days-count, que devuelve el número de aves que han visitado tu jardín desde el comienzo de la semana, pero limita el conteo al número de días especificado desde el comienzo de la semana.
(n-days-count birds-per-day 4)
;;=> 14
Algunos días son más ajetreados que otros. Un día ajetreado es aquel en el que cinco o más aves han visitado tu jardín.
Implementa la función busy-days para que devuelva el número de días ajetreados:
(busy-days birds-per-day)
;;=> 2
Durante el último año, has notado que algunas semanas siguen el mismo patrón impar, en el que los conteos alternan entre una y cero aves visitantes. Implementa la función odd-week? que devuelve true si el patrón de conteo de aves de esta semana coincide con el patrón impar:
(odd-week? [1 0 1 0 1 0 1])
;;=> true
Regístrate en Exercism para aprender y dominar Clojure con 12 conceptos105 ejercicios y mentoría humana real, todo gratis.