関数型プログラミング言語Haskell Part18
■ このスレッドは過去ログ倉庫に格納されています
0185デフォルトの名無しさん
2012/04/25(水) 01:23:27.55Yampaは、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からたどれるリンクを片っ端から読みあさるのが良いと思う。
http://www.haskell.org/haskellwiki/Functional_Reactive_Programming
http://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/
■ このスレッドは過去ログ倉庫に格納されています