La programación funcional ofrece al programador un buen número de recursos expresivos que permiten resolver problemas complejos mediante programas pequeños y robustos. Se destaca por la posibilidad de definir funciones que aceptan otras funciones como argumentos y devuelven funciones como resultado, facilidades para definir y manipular estructuras de datos infinitas, un modelo computacional simple, claro y bien fundamentado.
Scheme es un lenguaje funcional (si bien impuro, ya que, por ejemplo, sus estructuras de datos no son inmutables) y un dialecto de Lisp. Fue desarrollado por Guy L. Steele y Gerald Jay Sussman en la década de los setenta e introducido en el mundo académico a través de una serie de artículos conocidos como los Lambda Papers de Sussman y Steele. Las listas son la estructura de datos básica del lenguaje, que también ofrece arrays entre sus tipos predefinidos.
Racket fue desarrollado como un entorno de programación gráfico, integrado e interactivo para el lenguaje de programación Scheme. Proporciona resaltado de fuente para los errores de sintaxis y de ejecución, compatibilidad con múltiples niveles de lenguaje, un algoritmo algebraico, objetos, módulos, una biblioteca de interfaz gráfica de usuario, protocolos TCP/IP, Unicode y mucho más.
Una vez que te hayas familiarizado un poco con el lenguaje y su entorno ( Racket ), considere la estructura de datos Conjunto , que representa conjuntos potencialmente infinitos. La estructura conjunto debe ser implementada a través de listas .
Una vez definida la estructura conjunto se debe implementar las funciones básicas de conjunto:
a)
Miembro: Debe devolver la pertenencia de un elemento a en el conjunto proporcionado, de un elemento dado.
b)
Vacio: Debe devolver un conjunto vacío.
c)
singleton: Debe devolver un conjunto que contenga únicamente al elemento proporcionado.
d)
desdeLista: Debe devolver un conjunto que contenga a todos los elementos de la lista proporcionada.
e)
Complemento: Debe devolver un conjunto que contenga únicamente todos los elementos que no estén en el conjunto proporcionado (pero que sean del mismo tipo).
f)
Unión: Debe devolver un conjunto que contenga todos los elementos de cada conjunto proporcionado.
g)
Intersección: Debe devolver un conjunto que contenga solo los elementos que está en los dos conjuntos proporcionados.
h)
Diferencia: Debe devolver un conjunto que contenga los elementos del primer conjunto proporcionado, que no estén en el segundo.
Entrega:
El programa debe ir acompañado de un informe el cual explique cuál fue la lógica o estrategia para resolver el problema. Indicar si existen algunas consideraciones especiales que estén haciendo que alteran los requerimientos originales.
La entrega se realizará el día lunes 26/01/2015, en digital (cd) conteniendo el programa y el informe, el cd debe estar debidamente identificado con el nombre del res