En las primeras clases de la materia de Programación I, en la que vemos el paradigma de programación funcional, hemos explorado diferentes tipos de datos y operaciones con ellos. Mediante ese análisis hemos llegado a explorar conceptos importantes como la composición de funciones y elementos estructurales del lenguaje Scheme como la declaración de funciones, reglas de contexto léxico (local) y finalmente declaración y uso de estructuras.
Las estructuras resuelven la necesidad de crear nuevos tipos de datos que en sí mismos están compuestos por varios componentes de cualquier otro tipo. Sin embargo, todavía no sabemos cómo manejar un conjunto de datos con el mismo patrón, por ejemplo, cómo se resolvería un llamado de la siguiente forma:
(transferir estudiantes profesor)
en la que estudiantes es un conjunto de datos de tipo estudiante, estructura definida de la siguiente manera:
(define-struct estudiante (nombre apellido profesor nota))
El llamado en cuestión, debería efectuar su acción sobre cada uno de los datos del conjunto, por ejemplo cambiarles a todos el profesor por lo que contenga el parámetro del mismo nombre.
Otra cosa que todavía no sabemos hacer es devolver en un sólo llamado más de un valor. Scheme tiene como característica fundamental que todas las expresiones se convierten en un sólo valor. ¿Qué pasa si yo quisiera que una función devolviera dos objetos de naturalezas totalmente diferentes, por ejemplo, que la operación de transferencia del ejemplo devolviera el conjunto de estudiantes modificados y simultáneamente true o false si la operación tuvo éxito o no?. Aunque alguien podría responder que creando una nueva estructura con los componentes que queremos retornar, esa solución viola un poco el propósito de una estructura, que es un dato cuyos elementos están estrechamente relacionados.
La solución a éste tipo de problemas es un tipo de datos muy general llamado listas. Para resolver los problemas anteriores la solución sería que la función transferir de los párrafos anteriores recibiera una lista de estudiantes y devolviera una lista compuesta por el grupo de estudiantes modificados y un valor booleano. A continuación se elaborará el concepto de listas y su uso, explorando de paso el concepto de recursividad. Disfrútenlo.
[Read the rest of this entry…]