¿Cómo puedo implementar de manera eficiente una estructura de datos de listas donde puedo tener 2 vistas al principio y al final de la lista, que siempre apuntan a la cola una cola de una lista sin costosas llamadas a la inversa. es decir:Cola eficiente en Haskell
start x = []
end x = reverse start -- []
start1 = [1,2,3] ++ start
end start1 -- [3,2,1]
final debe ser capaz de hacer esto sin invocar 'inversa', sino simplemente mirar la lista dada desde la perspectiva de la lista de ser a la inversa automáticamente. Lo mismo debería ocurrir si creo nuevas listas de concatenaciones para comenzar.
En Haskell no puede cambiar los valores. 'start' siempre será la lista vacía, y' end' siempre será 'reverse' de eso (la lista vacía). Si desea mantener el estado, debe mirar la mónada de estado. –
corrección: por actualización me refiero a rebind. – TheOne
@Absolute: lo que tú llamas no cambia la verdad fundamental de que no puedes * cambiar * cosas (a pesar de la mónada de IO) en Haskell. No puedes volver a unir cosas. –