2016-09-04 7 views
1

私は光沢ライブラリを使用してシミュレーションを行っています。条件が真であるときにsimulation関数を停止する関数はありますか?最後に描画された画像だけがウィンドウに残ります。事前光沢Haskellのフリーズシミュレーション

+1

シミュレーションをフリーズする必要があるかどうかを記録する別の状態変数を追加するだけですか? 'isFrozen'値が' True'の場合は、現在のモデルを返します。それ以外の場合は、それを展開します。つまり、ステップ関数を適用します。 – ErikR

答えて

0

おかげ@ErikRは、あなたが探している状態に達した後、あなたはもうモデルを更新しないように金額を記載しているものを、示唆したように。あなたがstep機能を持っていて、isFrozenは、モデルの真となった場合のシミュレーションを停止したいときは

untilModel 
    :: (ViewPort -> Float -> model -> model) 
    -> (model -> Bool) 
    -> (ViewPort -> Float -> model -> model) 
untilModel step isFrozen v f m = 
    if isFrozen m then m 
    else step v f m 

、あなたは、単に変更されたステップ関数simulateを渡すことができます:あなたはまさにこのことステッピングの機能に作用するコンビネータを定義することができますstep `untilModel` isFrozen