Myślę specjalnie o przetwarzaniu sygnału. Powiedzmy, że chciałem zrobić coś w rodzaju podwójnej wielkości nadchodzącego sygnału. Chciałbym, żeby był bardzo szybki, więc chciałbym, aby sygnał był trzymany w ciągłej pamięci (na przykład nieskrytych wektorów). Ale ten sygnał mógłby trwać w nieskończoność, więc chciałbym, aby traktowano go jako nieskończoną listę; Wolę zadzwonić pod numer map (*2) signal
, zamiast wywoływać go dla każdego fragmentu sygnału.Czy istnieją nieskończone listy z niezakodowaną wydajnością wektorową?
Czy istnieje struktura danych w Haskell, która buforowałaby te porcje danych, aby uzyskać ciągłą wydajność pamięci, ale traktować dane jako strumień nieskończony?
[I zbadać, czy to możliwe, aby zaprojektować Biblioteka DSP jakiś czas temu] (https://github.com/leftaroundabout/timed-media/blob/master/Media/Timed/Audio.hs). (Myślę, że tak jest, przynajmniej możesz zbudować trochę przyzwoitego przykładu melodii ... ale nie zrobiłem na tym dużo poważniejszej pracy). Spękana nieskończona lista, ale bez całej tej księgowości czasu byłaby interesującym projektem na własne prawo. – leftaroundabout
Robią to leniwe bytestiny, z wyjątkiem tego, że mogą przechowywać tylko bajty. Wewnętrznie, leniwy bytestring jest listą rozpakowanych tablic. Nie znam podobnej biblioteki dla innych typów danych. – Heatsink
Leniwe bajki wydają się być dokładnie tym, o co proszę. Wygląda na to, że [ta biblioteka] (http://hackage.haskell.org/package/storablevector-0.2.8.3/docs/Data-StorableVector-Lazy.html) próbuje zrobić to samo, ale z dowolnymi elementami. – awelkie