反応バナナで特定のタイプのイベントのスロットリングを実装したいと思います。通過した最後のイベントからデルタ秒未満で到着した場合、イベントが通過しないように動作する必要があります。通過させられない場合は保存され、最後に発生したイベントから delta 秒後に発生します。
以下は、タイムスタンプ付きの番号のリストに対してこれを実装するプログラムです。これを react-banana に変換することは可能でしょうか?
また、リアクティブバナナでは、他のイベントが入ってからx秒後にイベントを発生させるにはどうすればよいですか?
モジュールのメイン
import Data.List
-- 1 秒のスロットリング
-- ロジックは、最後の値が出力されてから 1 秒が経過するまで値を出力しないことです。
メイン :: IO()
main = print $ test [ (0.0, 1.0), (1.1, 2.0), (1.5,3.0), (1.7,4.0), (2.2, 5.0) ]
-- [ (0.0, 1.0), (1.1, 2.0), (2.1,4.0), (3.1, 5.0) ] を出力する必要があります
テスト :: [(Double,Double)] -> [(Double,Double)]
テスト リスト = gv (concat xs)
どこ
(v, xs) = mapAccumL f (-50,Nothing) リスト
g (t, Just x) ys = ys ++ [ (t+1,x) ]
g_ys = ys
f (lasttime, Just holdvalue) (t,x) = if t > (lasttime+1) then
t > (前回 + 2) の場合
( (t, Nothing), [ (lasttime+1,holdvalue), (t,x)] )
else ( (lasttime+1, Just x) , [ (lasttime+1,holdvalue) ] )
そうしないと
((前回, Just x), [] )
f (lasttime, Nothing) (t,x) = if t > (lasttime+1) then
( (t,Nothing) , [ (t, x ) ] )
else ( (前回, Just x), [] )