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

El comando apply de Tcl

Puede que los casos de prueba te parezcan confusos. Se espera que implementes lo siguiente:

set myList {alpha beta gamma delta}
listOps::filter $myList {{word} {expr {[string length $word] == 4}}

¿Por qué tiene tantas llaves ese último argumento?

Recuerda que el comando proc se define así:

proc procName argList body

Tcl tiene un comando apply:

apply func ?arg1 arg2 ...?

este «func» es una lista de dos elementos, {argList body}, que es, en esencia, un proc anónimo (o «lambda»). El comando apply invoca ese proc anónimo y le pasa los argumentos que necesita.

Por ejemplo, todo esto es equivalente:

# 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 facilita pasar bloques de código de un sitio a otro.

Referencia: apply, proc.

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

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

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