Tracks
/
Clojure
Clojure
/
Ejercicios
/
Operaciones con arrays
Operaciones con arrays

Operaciones con arrays

Intermedia

Instrucciones

Implementa operaciones básicas de arrays.

En los lenguajes funcionales, las operaciones de arrays como length, map y reduce son muy comunes. Implementa una serie de operaciones básicas de arrays, sin usar funciones existentes.

El número exacto y los nombres de las operaciones que debes implementar dependerán del track, para evitar conflictos con nombres existentes, pero las operaciones generales que implementarás incluyen:

  • append (dados dos arrays, agrega todos los elementos del segundo array al final del primero);
  • concatenate (dada una serie de arrays, combina todos los elementos de todos los arrays en un solo array aplanado);
  • filter (dado un predicado y un array, devuelve el array de todos los elementos para los que predicate(item) es True);
  • length (dado un array, devuelve el número total de elementos que contiene);
  • map (dada una función y un array, devuelve el array de los resultados de aplicar function(item) a todos los elementos);
  • foldl (dadas una función, un array y un acumulador inicial, fold (reduce) cada elemento en el acumulador desde la izquierda);
  • foldr (dadas una función, un array y un acumulador inicial, fold (reduce) cada elemento en el acumulador desde la derecha);
  • reverse (dado un array, devuelve un array 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 fold (foldl, foldr) es importante.

Apéndice

Note

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

Para este ejercicio en el track de Clojure, asume que tanto la entrada como la salida son vectores, como indican las pruebas. Como objetivo adicional, piensa en cómo implementar un enfoque que no use listas para los pasos intermedios.

Es importante no reutilizar funciones integradas de Clojure que ya existen y tienen una funcionalidad similar, ya que hacerlo reduciría el valor de aprendizaje que se busca con este ejercicio. Algunas funciones clave del espacio de nombres clojure.core que debes evitar son 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 buscan un desafío extra, y está pensado suponiendo que ya completaste el objetivo principal.

Intenta pasar las pruebas ideando un enfoque que suponga lo siguiente:

  • Que tanto la entrada como la salida son listas en lugar de vectores. Ten en cuenta que, como siempre, no es necesario modificar las pruebas.
  • Que no se pueden usar vectores para los pasos intermedios.

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

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

¿Todo 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.

¡Profundiza en 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 profundiza en la recursión de cola y las funciones acumuladoras.