Zauważyłem, że streams wydaje się działać bardzo podobnie do list, z wyjątkiem ciągłego dodawania czasu. Oczywiście dodawanie ciągłego dodawania czasu do list nie jest zbyt skomplikowane, a właśnie to robi DList.Haskell: Listy kontra strumienie
Załóżmy, że do końca dyskusji, że obie listy mają stały czas dołączenia lub że po prostu nie jesteśmy nimi zainteresowani.
Uważam, że listy Haskella powinny być po prostu implementowane jako strumienie. Na to nie być przypadek, zakładam, że następująca musiałby posiadać:
- Istnieją przypadki, w których listy są lepsze niż strumieni I
- Istnieją przypadki, gdzie strumienie są lepsze niż list.
Moje pytanie brzmi: jakie są przykłady dwóch powyższych przypadków?
Uwaga: Dla celów tego pytania, proszę zignorować łatwe do naprawienia pominięcia w konkretnych implementacjach, które omówiłem. W tym miejscu szukam podstawowych różnic strukturalnych.
Dodatkowe informacje:
Chyba część tego, co mi chodzi tutaj jest powiedzieć, czy piszemy [1..1000000]
, czy kompilator Haskell (powiedzmy GHC) zrobić:
- dokonać lista LUB
- Utwórz obiekt z dwoma wzorcami: 1 i 1000000, który w pełni opisuje listę.
Jeśli to sprawa (1), dlaczego tak jest, ponieważ tworzenie list pośrednich wydaje się być niepotrzebną karą za wyniki?
A jeśli to sprawa (2), to dlaczego potrzebujemy strumieni?
Hm, co sprawia, że strumienie mają ciągły czas dołączania/wstawiania? Z implementacji wygląda na to, że dodanie elementów n spowoduje, że funkcja 'step' będzie musiała przejść przez O (n) za pomocą' albo 'konstruktorów zagnieżdżonych w głębokości O (n). Dokumentacja nie czyni tego stałego roszczenia gdziekolwiek, co też widzę. –
@DanielWagner: Uczciwa. W każdym razie sprawia, że strumienie są jeszcze bardziej podobne do list. – Clinton
Właściwie to czyni je zupełnie innymi. Z listami, wady są bezpłatne, a Ty płacisz za snoc i konkatenuj na podstawie długości pierwszej listy; w porównaniu z strumieniami, które płacisz za głębokość drzewa konkatenacji, a rozmiary łączonych elementów są nieistotne. Ale ta różnica nie jest tym, co sprawia, że strumienie są ważne. –