En un nivel más filosófico --- nunca puede haber una correspondencia estricta entre el concepto matemático de un conjunto y la implementación de un conjunto Haskell. Por qué no? Bueno, el sistema de tipos, para empezar. Un conjunto matemático puede tener cualquier cosa: {x | x is a positive integer, i < 15}
es un conjunto, pero también lo es {1, tree, ham sandwich}
. En Haskell, un Set a
necesitará tener un tipo determinado. Poner dobles y flotantes en el mismo conjunto no hará una comprobación de tipo.
Como han dicho otros, si necesita hacer algunas cosas como un conjunto y no le importa la restricción de tipo, Data.Set existe. No está en Preludio porque las listas son usualmente más prácticas. Pero realmente, desde la perspectiva del diseño del lenguaje, no tiene sentido pensar en conjuntos matemáticos como un tipo de datos entre muchos. Los conjuntos son más fundamentales que eso. No tiene juegos, números y listas; tienes conjuntos de números y conjuntos de listas. El poder de los tipos recursivos tiende a oscurecer esa distinción, pero sigue siendo real.
Hay un lugar en Haskell, donde definimos colecciones arbitrarias, y luego definimos funciones sobre esas colecciones. El análogo más cercano al concepto matemático de conjuntos en Haskell es el sistema de tipos en sí mismo.
** Nota del moderador ** Los comentarios bajo esta pregunta fueron mayormente ruido, o una reacción al ruido y se eliminaron. Por favor, mantenga los comentarios constructivos y sobre el tema. –
Veo respuestas/comentarios que sugieren el uso de listas en su lugar. una lista no es un reemplazo eficiente para el conjunto. el tiempo para encontrar un elemento en una lista desordenada crece con el tamaño de la lista, en un conjunto, se espera que sea constante. – ribamar