Comment puis-je implémenter efficacement une structure de données de liste où je peux avoir 2 vues en tête et en fin de liste, qui pointent toujours en tête d'une liste sans appels onéreux à inverser. i.e.:File d'attente efficace dans Haskell
start x = []
end x = reverse start -- []
start1 = [1,2,3] ++ start
end start1 -- [3,2,1]
fin devrait être en mesure de le faire sans invoquer « inverse », mais regardant simplement la liste donnée dans la perspective de la liste étant en sens inverse automatiquement. La même chose devrait se produire si je crée de nouvelles listes à partir de concaténations pour commencer.
Dans Haskell, vous ne pouvez pas modifier les valeurs. 'start' sera toujours la liste vide, et' end' sera toujours 'reverse 'de celle-ci (la liste vide). Si vous voulez garder l'état, vous devriez regarder la monade d'état. –
correction: par mise à jour je veux dire rebind. – TheOne
@Absolute: ce que vous appelez cela ne change pas la vérité ultime que vous ne pouvez pas * changer * les choses (nonobstant "IO") en Haskell. Vous ne pouvez pas relier les choses. –