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.
Este es el primer ejercicio que vemos en el que la solución que escribimos no es un script «main». Estamos escribiendo una biblioteca a la que se le hará «source» desde otros scripts que invocarán nuestras funciones.
Este ejercicio requiere el uso de variables nameref. Para eso necesitas una versión de bash al menos 4.0. Si usas el bash que viene por defecto en MacOS, tendrás que instalar otra versión: consulta Instalar Bash
Los namerefs son una forma de pasar una variable a una función por referencia. De esa manera, la variable se puede modificar dentro de la función y el valor actualizado queda disponible en el ámbito desde el que se hace la llamada. Aquí tienes un ejemplo:
prependElements() {
local -n __array=$1
shift
__array=( "$@" "${__array[@]}" )
}
my_array=( a b c )
echo "before: ${my_array[*]}" # => before: a b c
prependElements my_array d e f
echo "after: ${my_array[*]}" # => after: d e f a b c
Regístrate en Exercism para aprender y dominar Bash con 97 ejercicios y mentoría humana real, todo gratis.
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.