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.
apply de TclLos casos de prueba pueden parecer confusos. Se espera que implementes esto:
set myList {alpha beta gamma delta}
listOps::filter $myList {{word} {expr {[string length $word] == 4}}
¿Por qué ese último argumento tiene tantas llaves?
Recuerda que el comando proc se define así:
proc procName argList body
Tcl tiene un comando apply:
apply func ?arg1 arg2 ...?
ese «func» es una lista de dos elementos, {argList body}, que es esencialmente un proc anónimo (o «lambda»).
El comando apply invoca ese proc anónimo y le pasa los argumentos que necesita.
Por ejemplo, estos son equivalentes:
# using proc
proc myReverse {str} {return [string reverse $str]}
puts [myReverse "Hello, World!"]
# using apply
puts [apply {{str} {string reverse $str}} "Hello, World!"]
# or, store the func in a variable
set func {{str} {string reverse $str}}
puts [apply $func "Hello, World!"]
Usar apply hace que sea más sencillo pasar bloques de código de un lado a otro.
Regístrate en Exercism para aprender y dominar Tcl con 135 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.