Моя сеть выглядит так:
ePhysics :: Event t ()
bPlayerForce :: Behavior t (Double,Double)
bPlayerPosition :: Behavior t (Double, Double)
ePhysics
постоянно запускается по таймеру.
У меня возникли проблемы с определением bPlayerPosition
. Я имею в виду, что он начнется с (0,0)
, и всякий раз, когда запускается ePhysics
, bPlayerPosition
будет пересчитываться с использованием bPlayerForce
в качестве параметра.
Проблема в том, что для указания начального значения мне нужно использовать accumB
/stepper
, но они работают только с событиями, и я не могу получить значение силы из bPlayerForce
, так как только поведения могут получить значение других поведений (с <*>
).
Альтернативой было бы просто использование <*>
, но при этом у меня нет начального значения, поэтому это становится бессмысленной бесконечной рекурсией:
let bPlayerPosition = pure calcPosition <*> bPlayerForce <*> bPlayerPosition
У меня есть 3 вопроса:
- Есть ли способ получить ценность поведения без
<*>
? например, когдаreactimate
инг или отображение события? проблема неспособности не дает мне покоя с самого начала. - Будет ли более функциональный/frp способ заниматься физикой? (в целом и те, которые относятся к вопросу)
- Как я могу решить представленную проблему?
apply
, он же(<@>)
- person luqui   schedule 12.08.2014integral :: (VectorSpace v) => Behavior v -> Behavior v
, который не предоставляет реактивный банан, но который может быть аппроксимирован (по сути, так, как вы описываете здесь, но значение важно!). - person luqui   schedule 12.08.2014apply
? Я имею в виду, что у меня нет никакого события, относящегося к его аргументу. Если реактивный банан не на 100% идеально подходит для этой задачи, не могли бы вы предложить библиотеку FRP, которая была бы более полной для меня (и, надеюсь, сintegral
, о котором вы упомянули)? - person MasterMastic   schedule 12.08.2014