185 名前:デフォルトの名無しさん mailto:sage [2012/04/25(水) 01:23:27.55 ] Reactiveはもうメンテされてなくて、今のGHCじゃコンパイルできないから俺はノータッチだけど、 Yampaは、Reactiveなんかの古典FRPを写像変換子のアローとして再構築したライブラリだから、基本的なところの考え方に違いはないはず。 というか、生成、消滅、衝突とかをどう考えたらいいかわからないってのは、FRPの基本的な考えを理解してないからじゃないか? 時間に応じて離散的に変化する値を[(Time, a)]という無限リストだと捉えるのがイベント 時間に応じて連続的に変化する値をTime -> aという型の連続関数だと捉えるのがビヘイビア こいつらに対して、 定刻tを過ぎたらイベントを発する atTime :: Time -> Event a ビヘイビアを積分する integral :: Behavior a -> Behavior a イベントが発生したタイミングで、ビヘイビアの値を補足した新しいイベント作る snapshot :: Behavior a -> Event b -> Event (a, b) みたいなコンビネータを使ってごにょごにょするのがFRP。 例えば、キャラの移動速度の変化をビヘイビアとして定義して、integralで積分すれば、それが各時刻におけるキャラの位置のビヘイビアになる。 衝突、生成、消滅、キャラのステータス状態の変化、キー入力なんかは、イベントとして考えられるし、 毎フレームの更新自体もイベントとして考えられて、各キャラの更新は map (flip snapshot updateEvent) charactor みたいに書けば、それが各フレームのキャラの状態変化を表すイベントになる。 こんな感じで、イベントとビヘイビアを組み合わせて、より複雑なイベントやビヘイビアを作ってく。 とりあえず、Haskell wikiからたどれるリンクを片っ端から読みあさるのが良いと思う。 www.haskell.org/haskellwiki/Functional_Reactive_Programming www.haskell.org/haskellwiki/Reactive 本だとSOEが有名。 ・The Haskell School of Expression: Learning Functional Programming Through Multimedia ttp://www.amazon.co.jp/exec/obidos/ASIN/0521644089/