Rutas
/
Clojure
Clojure
/
Ejercicios
/
Operaciones con arrays
Operaciones con arrays

Operaciones con arrays

Media

Instrucciones

Implementa operaciones básicas con listas.

En los lenguajes funcionales, las operaciones con listas como length, map y reduce son muy habituales. Implementa una serie de operaciones básicas con listas, sin usar las funciones que ya existen.

El número y los nombres exactos de las operaciones que hay que implementar dependerán de cada track, para evitar conflictos con nombres ya existentes, pero las operaciones generales que vas a implementar son:

  • append (dadas dos listas, añade todos los elementos de la segunda lista al final de la primera);
  • concatenate (dada una serie de listas, combina todos los elementos de todas las listas en una sola lista aplanada);
  • filter (dados un predicado y una lista, devuelve la lista de todos los elementos para los que predicate(item) es True);
  • length (dada una lista, devuelve el número total de elementos que contiene);
  • map (dadas una función y una lista, devuelve la lista de los resultados de aplicar function(item) a todos los elementos);
  • foldl (dadas una función, una lista y un acumulador inicial, pliega (reduce) cada elemento dentro del acumulador desde la izquierda);
  • foldr (dadas una función, una lista y un acumulador inicial, pliega (reduce) cada elemento dentro del acumulador desde la derecha);
  • reverse (dada una lista, devuelve una lista con todos los elementos originales, pero en orden inverso).

Ten en cuenta que el orden en el que se pasan los argumentos a las funciones de plegado (foldl, foldr) es significativo.

Apéndice

Note

Las instrucciones anteriores se sincronizan con un repositorio compartido para garantizar la coherencia entre todos los tracks de lenguajes. Este apéndice ofrece aclaraciones adicionales o modifica las instrucciones según sea necesario para ajustarse mejor a los objetivos del track de Clojure.

Para este ejercicio en el track de Clojure, supón que tanto la entrada como la salida son vectores, tal como indican los tests. Como reto adicional, piensa en cómo implementar un enfoque que no use listas en los pasos intermedios.

Es importante no reutilizar funciones integradas de Clojure que ya existan y tengan una funcionalidad similar, ya que hacerlo reduciría el valor didáctico previsto del ejercicio. Entre las funciones clave del espacio de nombres clojure.core que conviene evitar están into, concat, cat, lazy-cat, mapcat, flatten, filter, filterv, remove, count, map, mapv, reduce, transduce, reverse y rseq.

Objetivos opcionales

El objetivo opcional es para quienes quieren un reto extra y está pensado para quien ya ha completado el objetivo principal.

Intenta pasar los tests ideando un enfoque que dé por supuesto lo siguiente:

  • Tanto la entrada como la salida son listas en lugar de vectores. Ten en cuenta que, como es habitual, no hace falta modificar los tests.
  • No se pueden usar vectores en los pasos intermedios.

Si decides publicarlo, asegúrate de incluir un comentario que indique que aborda el objetivo opcional de usar listas. ¡No olvides actualizar los docstrings!

Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Clojure Exercism

¿Listo para empezar Operaciones con arrays?

Regístrate en Exercism para aprender y dominar Clojure con 12 conceptos105 ejercicios y mentoría humana real, todo gratis.

¡Análisis en profundidad de Operaciones con arrays!

Disfruta de una introducción práctica a la recursión, explora las alternativas imperativas y funcionales a Operaciones con arrays y sumérgete en la recursión de cola y las funciones acumuladoras.