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.
apply de TclPuede 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.
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 sumérgete en la recursión de cola y las funciones acumuladoras.