Haskell 定义信号功能,如;积分;在Yampa方面';s公共API
我试图掌握Yampa,但从更高级别的信号函数(如Haskell 定义信号功能,如;积分;在Yampa方面';s公共API,haskell,yampa,Haskell,Yampa,我试图掌握Yampa,但从更高级别的信号函数(如integral)的定义来看,我不清楚如何使用Yampa导出的带有惯用Haskell的组合器来定义此类信号函数(目前我不关心性能)。我的目标是学习如何编写用于去抖动、缓冲、分组等的组合器 integral函数由未报告的构造函数SF和SF'定义。我如何才能只使用其他导出的组合符来编写它,可能使用更为惯用的带有开关和箭头符号的Yampa样式 integral :: VectorSpace a s => SF a a integral = SF {
integral
)的定义来看,我不清楚如何使用Yampa导出的带有惯用Haskell的组合器来定义此类信号函数(目前我不关心性能)。我的目标是学习如何编写用于去抖动、缓冲、分组等的组合器
integral
函数由未报告的构造函数SF
和SF'
定义。我如何才能只使用其他导出的组合符来编写它,可能使用更为惯用的带有开关和箭头符号的Yampa样式
integral :: VectorSpace a s => SF a a
integral = SF {sfTF = tf0}
where
tf0 a0 = (integralAux igrl0 a0, igrl0)
igrl0 = zeroVector
integralAux igrl a_prev = SF' tf -- True
where
tf dt a = (integralAux igrl' a, igrl')
where
igrl' = igrl ^+^ realToFrac dt *^ a_prev
通过查看
标识
,常量
,arrPrim
,可以为导出版本更改未报告的构造函数,但我发现,使用Hai Liu等人研究中的因果交换箭头这一更通用的方法更有趣
以我想要的样式显示一个integral
实现:
integral :: ArrowInit a => a Double Double
integral = proc x -> do
rec let i' = i + x * dt
i <- init 0 -< i'
returnA -< i
integral::ArrowInit a=>双精度
积分=过程x->do
rec让i'=i+x*dt
i通过查看标识
,常量
,arrPrim
等,可以为导出版本更改未报告的构造函数,但我发现使用Hai Liu等人研究中的因果交换箭头的更一般方法更有趣
以我想要的样式显示一个integral
实现:
integral :: ArrowInit a => a Double Double
integral = proc x -> do
rec let i' = i + x * dt
i <- init 0 -< i'
returnA -< i
integral::ArrowInit a=>双精度
积分=过程x->do
rec让i'=i+x*dt
我