Come posso implementare in modo efficiente una struttura di dati dell'elenco in cui posso avere 2 viste alla testa e alla fine dell'elenco, che puntano sempre a una coda di una lista senza chiamate costose da invertire. cioè:Efficiente coda in Haskell
start x = []
end x = reverse start -- []
start1 = [1,2,3] ++ start
end start1 -- [3,2,1]
finale dovrebbe essere in grado di farlo senza invocare 'inverso', ma semplicemente guardando la lista data dal punto di vista della lista sia in senso inverso automaticamente. Lo stesso dovrebbe valere se creo nuovi elenchi dalle concatenazioni per iniziare.
In Haskell non è possibile modificare i valori. 'start' sarà sempre la lista vuota, e' end' sarà sempre il 'reverse' di quello (la lista vuota). Se vuoi mantenere lo stato, dovresti guardare la monade di stato. Correzione –
: per aggiornamento intendo rebind. – TheOne
@Absolute: quello che tu chiami non cambia la verità ultima che non puoi * cambiare * cose (nonostante 'monade IO') in Haskell. Non puoi riassociare le cose. –