問題タブ [frp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - Functional Banana Traveler - 壊れたタイプのミステリー
次のエラーが表示されます。
のt0
とEvent
のt1
がBehavior
問題の手がかりですが、この手がかりをどのように解釈すればよいかわかりません。それでは、いくつかのタイプ、誤ったコード、およびそれが機能する理由についての私の推論から始めましょう。
initialAMap :: AgentMap
updateAgentMap :: HyperMap -> PlanetMap -> AgentMap -> AgentMap
bHyperMap :: Behavior t HyperMap
bPlanetMap :: Behavior t PlanetMap
accumB :: a -> Event t (a -> a) -> Behavior t a
これで、最初のパラメーターAgentMap
. 2 つ目は である必要がありますEvent t (AgentMap -> AgentMap)
。そこに着く方法?から始めるとupdateAgentMap <$> bHyperMap
、タイプは になりますBehavior t (PlanetMap -> AgentMap -> AgentMap)
。さて、もう 1 つのパラメータupdateAgentMap <$> bHyperMap <*> bPlanetMap
で type を指定しますBehavior t (AgentMap -> AgentMap)
。もうすぐですよね?
これを考える
(<@) :: f a -> g b -> g a
と、
eTick :: Event t ()
Iの代わりa
に(AgentMap -> AgentMap)
これを行うことができるはずです
(updateAgentMap <$> bHyperMap <*> bPlanetMap)
<@ eTick
取得するためEvent t (AgentMap -> AgentMap)
しかし、それほど速くはありません。私の推論はどこかで失敗しているに違いありません。誰か教えてくれませんか?
更新: eTick が定義されていなかったために、この問題が発生したことが判明しました (と思います)。コードの多くを独自のファイルに分離しようとしました。eTick を離れるundefined
ことは満足のいくものではないことはわかっていましたが、これについて何をしたいのかまだ考えていません。そのため、その間、コードを元のようにletバインディングに移動し始めました。これでコードがコンパイルされます。let
バインディングがそこに長く留まることを望みません。私の期待は、ブレークアウトプロジェクトを再訪することで、コードをより適切に構造化する方法が示されることです。
haskell - 反応バナナでビヘイビアに他のビヘイビアを含める方法
みんなリアクティブバナナFRPフレームワークでコンピューターゲームをやっているみたいなので、私もやってみました。ただし、ゲーム データをリアクティブ バナナ型として記述しようとして、初期段階に行き詰まっていBehavior
ます。
基本的に、私はゲーム キャラクター (フロドやサムなど) の (変化する) リストを作成しようとしています。ゲーム キャラクターは、ゲーム ティック (ティック イベントとしてモデル化) ごとに更新される場合があります。ゲーム キャラクターが変更されるたびにシングルEvent (Character)
がトリガーされ、最終的にキャラクターの更新がネットワーク経由で送信されるという考え方です。Asteroids.hsの例と比較した場合の利点は、ゲーム ステート全体 (ゲーム キャラクターの全リスト) をネットワーク経由で送信する必要がないことです。これは、単一のゲーム キャラクターを持つ多数のイベントが発生するためです。ゲーム キャラクター リストを含む単一のイベントの代わりに。
1 つのゲーム キャラクターの場合、これで問題なく動作します。Behavior (Character)
withを作成してmapaccum
、キャラクターが更新されたときにキャラクター更新シグナルが送信されるようにしました。Behavior
私が解決できない問題は、これをゲーム キャラクターのリストで機能させる方法です。
Behavior
ゲーム中にキャラクターが出入りする可能性があるため、ゲームキャラクターリストを としてモデル化しようとしています。ここで動的イベント切り替えを使用する必要がありますか? またはBehavior
、個々のゲーム キャラクターを使用しない場合 (Behavior
ゲーム キャラクター リストのみを使用する場合)、キャラクター リストを調べているときに条件付きで更新イベントをトリガーする方法はありますか? それとも、ここで何かを理解していませんか?
haskell - Functional Banana Traveler - 入力 処理 : これは私が望むことをしますか?
ゲームの入力を管理したい方法は、TChan をポーリングし、eTick が発生したときにイベントを作成することです。しかし、私が試している方法は機能しますか?
data UAC = UAC (AID,PlayerCommand) deriving Show
fromPoll
「入力、現在の時刻などの可変データを頻繁にポーリングして動作を取得します。結果の動作は、イベント ネットワークが入力イベントを処理するたびに更新されます。」のドキュメントから。
私はこれを正しく理解していますか?TChannel は他のコードから取り込まれており、それeTick
を空にして別のコードを取得するたびにEvent t [UAC]
?
私の理解が間違っているか、この計算は fromPoll には高すぎるのかもしれません。その場合、どの方向に進むのがより良いですか?
haskell - Functional Banana Traveler - tick イベントの何が問題になっていますか?
私は tick イベントを実装しようとしていますが、それが機能しないことを示す小さなテストを以下に示します。なぜそれが機能しないのかについての洞察をいただければ幸いです。
ここにいくつかのテストデータがあります。
上記を実行すると、Main
この出力が得られます。
ファイルCommands.txt
が存在することはありません。この問題は、ティックイベントの不良に起因すると考えています。
thisからタイマーの実装についてのアイデアを得ましたが、これについて間違った方法で考えているのだろうか。何か案は?
fromPoll
編集:正しいことをしているという保証が欲しかった. 上記のテストを追加しました。
javascript - 呼び出す前にすべての関数引数を順番に満たす
次のzip関数(特にinvoke関数)をより機能的にする方法を理解しようとしています。私が抱えている問題は、呼び出しメソッドが値をディスパッチする前に、左側と右側の両方が満たされるのを待たなければならないことです。正しい値が圧縮されるように値を順番に呼び出す必要があります。それ以外の場合は、これを満たすためにカレー/部分関数を検討します。
この障害を取り除くために使用できるものはありますか。
以下は、zip 関数を満たす単純な例です。
おまけ:可変配列の削除。
racket - ラケット「ユニバース」のティーチパックはFRPの例ですか?
2htdp /universeのティーチパックは、関数型リアクティブ プログラミングの良い例 (または悪い例、またはそうでない例) ですか?
コンセプト (ティック/入力ごとに世界の新しい状態が構築される) には合っているようですが、それに関連付けられた FRP ラベルは見たことがありません。
haskell - 再帰的に自分自身に依存するリアクティブ バナナ動作を実装する方法は?
イベントの発生と動作の現在の値に基づいて値を変更したい動作があります。以下の例では、ブール値の動作が True であるか False であるかに基づいて更新される 2 つのカウンターがあります。このコードは<<loop>>
例外でクラッシュしますが、再構築して機能させる方法や、この問題に対処する方法がわかりません。
javascript - FRP と Bacon.js を使用してダブルクリックとシングルクリックを適切に処理する
Bacon.js でシングル クリックとダブル クリックを区別する最も適切な方法を見つけようとしていますが、これがどのように機能するかを完全に把握していないように感じます。以下はダブルクリックを検出するために機能しますが、シングル クリック イベントに対して異なる動作 (つまり、異なるコールバック関数) をエレガントに指定する方法については、少し困惑しています。
ios - シグナルチェーンでエラーを送信する方法
整数値を含む信号 A があります。-1 の値は無効な結果を示すため、値として -1 を渡す代わりに、エラーを送信したいと思います。このようにして、B にサブスクライブするものはすべて、subscribeNext: を介して有効な整数を受け取り、subscribeError: を介してエラーを受け取ります。
私は RACSubject でこれを行う方法を知っていると思います:
次の行に沿ってこれを行うためのより「インライン」な方法があるかどうか疑問に思っています。
objective-c - dispatch_queue sendComplete で作成された RACSubject がマージされたシグナルにならない
DISPATCH_QUEUE_PRIORITY_DEFAULT gcd キューで実行されている dispatch_async ブロックの場合: 2 つの RACSubject オブジェクトを作成し、RACSignal マージを使用して、サブスクライブを完了します。次に、このテストのために (そして実際のコードでシナリオを再現するために)、両方で sendComplete を送信します。マージされたシグナル完了サブスクリプションは決して発火しません。サブジェクトに 2 つの完了サブスクリプションを個別にアタッチしましたが、それらは起動します。gcd キューの代わりにメイン スレッドで同じテストを行うと、期待どおりに動作します。
これを機能させる方法はありますか、それともメインスレッドですべてのサブジェクトを取得するためにリファクタリングする必要がありますか?