我在思考專門用於信號處理。比方說,我想要做一些事情,比如輸入信號的幅度的兩倍。我希望它速度非常快,所以我希望信號保存在連續的存儲器中(例如,非盒裝向量)。但是這個信號可能無限期地繼續下去,所以我希望它被視爲無限的列表;我寧願撥打map (*2) signal
一次,而不是爲每個信號塊調用它。是否有無限列表與無盒矢量性能?
Haskell中是否有數據結構會緩衝這些數據塊,以便獲得連續的內存性能,但將數據視爲無限流?
我在思考專門用於信號處理。比方說,我想要做一些事情,比如輸入信號的幅度的兩倍。我希望它速度非常快,所以我希望信號保存在連續的存儲器中(例如,非盒裝向量)。但是這個信號可能無限期地繼續下去,所以我希望它被視爲無限的列表;我寧願撥打map (*2) signal
一次,而不是爲每個信號塊調用它。是否有無限列表與無盒矢量性能?
Haskell中是否有數據結構會緩衝這些數據塊,以便獲得連續的內存性能,但將數據視爲無限流?
這只是一個長鏡頭,但是如何使用streams足夠大的無盒子矢量塊呢?這將有利於向量的性能,同時,由於流,fusion。
更新:的想法是定義一個newtype
如:
import Data.Array.Unboxed
import Data.Stream
import Data.Word
newtype Word8Stream = Word8Stream (Stream (UArray Int Word8))
,然後確定你需要如
smap :: (Word8 -> Word8) -> Word8Stream -> Word8Stream
smap f (Word8Stream s) = Word8Stream $ fmap (amap f) s
[我探討它是否可行,設計一個通用功能DSP庫這種方式前不久](https://github.com/leftaroundabout/timed-media/blob/master/Media/Timed/Audio.hs)。 (我想是的,至少你可以製作一些流暢的例子旋律的東西......但我沒有做過很多認真的工作。)一個大塊的無限列表,但沒有所有的時間簿記將是一個有趣的項目它自己的權利。 – leftaroundabout
懶惰的bytestrings這樣做,除了它們只能保存字節。在內部,一個懶惰的字符串是一個unboxed數組列表。我不知道其他數據類型的類似庫。 – Heatsink
惰性字節串似乎正是我所要求的。看起來像[這個庫](http://hackage.haskell.org/package/storablevector-0.2.8.3/docs/Data-StorableVector-Lazy.html)試圖做同樣的事情,但隨意的元素。 – awelkie