Me he dado cuenta streams parecen actuar como listas, excepto con la adición de tiempo constante. Por supuesto, agregar tiempo constante a las listas no es muy complicado, y DList hace exactamente eso.Haskell: Listas vs Streams
Supongamos para el resto de la discusión que cualquiera de las listas tiene un apendice de tiempo constante, o que simplemente no estamos interesados en ella.
Mi idea es que las listas de Haskell deberían simplemente implementarse como transmisiones. Para que esto no sea el caso, supongo que la siguiente necesitaría celebrar:
- Hay casos en que las listas son mejores que las corrientes Y
- Hay casos en que las corrientes son mejores que las listas.
Mi pregunta es: ¿cuáles son los ejemplos de los dos casos anteriores?
Nota: A los efectos de esta pregunta, ignore las omisiones fácilmente corregibles en las implementaciones particulares que he discutido. Estoy buscando más diferencias estructurales centrales aquí.
Otros detalles:
supongo que parte de lo que estoy haciendo aquí es decir si escribimos [1..1000000]
, hace un compilador de Haskell (digamos GHC) hacer:
- Hacer una list O
- Haga un objeto con dos entradas: 1 y 1000000 que describa completamente la lista.
Si es el caso (1), ¿por qué hacer esto, ya que crear listas intermedias parece ser una penalización de rendimiento innecesaria?
O si es el caso (2), entonces ¿por qué necesitamos flujos?
Hm, ¿qué te hace decir que las transmisiones tienen apend time/apend constante? Desde la implementación, parece que agregar n elementos dará como resultado una función de 'paso' que debe atravesar O (n) semillas con constructores 'Oither' anidados O (n) en profundidad. La documentación tampoco hace este reclamo de tiempo constante en ningún lugar que yo pueda ver. –
@DanielWagner: suficiente. En cualquier caso, eso hace que las transmisiones sean incluso más como listas. – Clinton
En realidad, eso los hace muy diferentes. Con las listas, los inconvenientes son gratuitos, y usted paga por snoc y concatena basado en la longitud de la primera lista; en comparación, con los flujos que paga por la profundidad del árbol de concatenación, y los tamaños de las cosas que se concatenan son irrelevantes. Pero esa diferencia no es lo que hace que las transmisiones sean importantes. –