awe*_*kie 6 haskell signal-processing lazy-evaluation
我正在考虑专门用于信号处理.假设我想做一些像输入信号幅度加倍的事情.我希望它非常快,所以我希望信号保存在连续的内存中(例如,未装箱的矢量).但是这个信号可以无限期地继续下去,所以我希望它被视为一个无限的列表; 我宁愿打电话map (*2) signal
一次而不是为每个信号块调用它.
Haskell中是否有一个数据结构可以缓冲这些数据块,以便我可以获得连续的内存性能,但是将数据视为无限流?
这仅仅是一个长镜头,但对于使用流的拆箱载体的足够大的块?这将具有矢量性能的优势,同时由于流而融合.
更新:想法是定义newtype
如下:
import Data.Array.Unboxed
import Data.Stream
import Data.Word
newtype Word8Stream = Word8Stream (Stream (UArray Int Word8))
Run Code Online (Sandbox Code Playgroud)
然后定义您需要的通用函数,例如
smap :: (Word8 -> Word8) -> Word8Stream -> Word8Stream
smap f (Word8Stream s) = Word8Stream $ fmap (amap f) s
Run Code Online (Sandbox Code Playgroud)