Por lo que entiendo, el tipo de lista en Haskell se implementa internamente mediante una lista vinculada. Sin embargo, el usuario del idioma no puede ver los detalles de la implementación, ni tiene la capacidad de modificar los "enlaces" que componen la lista vinculada para permitirle apuntar a una dirección de memoria diferente. Esto, supongo, se hace internamente.Listas en Haskell: tipo de datos o tipo de datos abstractos?
Entonces, ¿cómo se puede calificar el tipo de lista como en Haskell? ¿Es un "tipo de datos" o un "tipo de datos abstracto"? ¿Y qué hay del tipo de lista enlazada de la implementación?
Además, dado que el tipo de lista proporcionado por el Preludio no es un tipo de lista vinculada, ¿cómo se pueden implementar las funciones básicas de la lista enlazada?
Tomemos, por ejemplo, este fragmento de código diseñado para añadir un elemento a en el índice n de una lista:
add [] acc _ _ = reverse acc
add (x:xs) acc 0 a = add xs (x:a:acc) (-1) a
add (x:xs) acc n a = add xs (x:acc) (n-1) a
El uso de una lista "real", el añadido de un elemento sería simplemente consistir en la modificación un puntero a una dirección de memoria. Esto no es posible en Haskell (¿o no?), De ahí la pregunta: ¿es mi implementación de agregar un elemento a una lista el mejor posible, o me falta algo (el uso de la función reverse
es, creo, particularmente feo, pero ¿es posible prescindir?)
Por favor, no dude en corregirme si algo de lo que he dicho es incorrecto, y gracias por su tiempo.
¡Bienvenido a StackOverflow! Gran primera pregunta. – Sampson
http://en.wikibooks.org/wiki/Haskell/List_processing –
Gracias a todos los que respondieron mi pregunta, y aunque solo puedo marcar una de ellas como mi "respuesta aceptada", todos fueron muy útiles. – CharlieP