Tracks
/
Tcl
Tcl
/
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.

El comando apply de Tcl

Los 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.

Ref: apply, proc.

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

¿Todo listo para empezar Operaciones con arrays?

Regístrate en Exercism para aprender y dominar Tcl con 135 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.