問題タブ [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 - ヤンパ/アニマのSF同士の依存関係でエンドレスループを防ぐ
この関数型リアクティブ プログラミングがどのように機能するかを理解しようとしていますが、問題が発生しました。私はboidシミュレーションを作成しようとしていますが、ゆっくりと始めています。今のところ、開始位置を取り、入力がポイントである位置から位置への信号関数を作成する関数としてboidを定義しましたに向かって移動しており、出力は現在の位置です。
seek 関数は 2 つの入力を取ります (ループのため)。現在位置と目標位置。次に、現在の位置からターゲット位置に向かって 50 の大きさ、つまり速度で指すベクトルを作成します。次に、速度が積分され、開始位置が追加されます。最終的に、信号は 2 つに分割されるため、1 つが出力になり、もう 1 つがシーク関数にループバックされます。
これで、次のようにボイドを定義できます。
ここで、aBoid は点 (500, 500) に向かってシークし、bBoid は aBoid に向かってシークします。
私の問題は、2つのボイドがお互いに向かってシークしたいときです。私がこれを行うとき:
プログラムは単に出力します:ProgramName: <<loop>>これは、無限ループに入ることを意味すると思います。
私はまた、次のような関数を使用しようとしましたpar:
ここで、route関数は各boidの出力を別のboidの入力にマップするだけです( のようzipに、ただしオフセットは1です)
これも<<loop>>メッセージを与えます。
オブジェクトが互いの状態に依存することは、リアクティブ システムを扱う場合によくある問題だと思うので、洗練された解決策があることを願っています。
私は、この FRP のことは非常に難しく、しばしば混乱を招くと思うことを付け加えておきます。
scala - イベントは外部から変更可能にする必要がありますか?
私は FRP をいじっていて、「発生」したイベントの行為をどのように公に扱うべきか疑問に思っていました。これは、プログラマーが FRP コンテキスト内で次のことを実行できる必要があることを意味します。
FRP の論文でこのような例を見たことがなく、私には適切ではありません。FRP フレームワークはこの種のアクションを本当に隠し、イベントの発生は舞台裏でのみ行われるべきだと思います。私はこれを考えるのが正しいですか?
明確にするために、私のアプローチは、 Event クラス自体にのみ「occur」にアクセスできるようにすることです。外部ソース (マウスなど) の抽象化が必要な場合は、Event クラスを拡張することで構築できます。このようにして、オカレンスの作成を扱うすべてのロジックが抽象化されます。
haskell - 反応バナナFRPライブラリを理解するための推奨読書/チュートリアル
FRP (関数型リアクティブ プログラミング)のリアクティブバナナhaskell ライブラリに興味があります。リアクティブバナナの背後にある理論を理解するために、初心者に何を読むことをお勧めしますか? 私が理解しているように、この分野ではある程度の進歩があり、さまざまな FRP ライブラリがさまざまなアプローチを使用しているため、どの FRP 論文でも対応できるとは思いません。
haskell - FRPの「過去」は気にしますか?
FRP の実装をいじっているとき、私が混乱していることの 1 つは、過去をどうするかということです。基本的に、私の理解では、いつでもビヘイビアでこれを行うことができるということでした:
これは、次のような場合にパフォーマンスに問題があるようです。
ここで、過去の動作を評価するには、すべてのイベントを保持する必要があり、サンプリングするたびに (最悪の場合) 線形スキャンを実行することになることがわかります。
この機能を利用できるようにしたいですか、それともビヘイビアを一度にのみ評価できるようにする必要がありますか? at関数をプログラマーに公開したいですか?
scala - FRP でのスナップショットの実装
Scala で FRP フレームワークを実装していますが、問題が発生したようです。いくつかの考えに動機付けられたこの質問は、フレームワークのパブリックインターフェイスを制限することに決めたので、動作は「現在」でのみ評価できます。
これは、Fran の論文での Conal の仮定とも一致しています。つまり、Behaviors は増加する回数だけ評価/サンプリングされるということです。ビヘイビアの変換を制限しますが、それ以外の場合は、いくつかの入力を表すビヘイビアで大きな問題が発生します。
この動作では、将来の値の評価は正しくなく、過去の値の評価には無制限の量のメモリが必要になります (「スライダー」イベントで使用されるすべてのオカレンスを保存する必要があります)。
この制限により、ビヘイビアの「スナップショット」操作の仕様に問題があります。私の問題は、例で最もよく説明されています(上記のスライダーを使用):
ここでの問題は、このコードの実行時に「mouseB」イベントが発生した場合、「ステッパー」の現在の値が「スライダー」の最後の「サンプル」(最後の発生時の値) になることです。最後に発生した時間が過去の場合、結果として、上記のルールセット (および元の仮定) を破る過去の時間を使用して「スライダー」を評価することになります。これを解決するには、いくつかの方法があります。
- 過去を「記録」します (イベント内の過去のすべての発生を保持します)。これにより、過去の時間で動作を評価できます (無制限の量のメモリを使用)
- 'snapshot' を変更して時間引数 (「この時間の後のサンプル」) を取り、その時間 >= 現在を強制します。
- より奇抜な方法として、FRP オブジェクトの作成をプログラムの初期セットアップに制限し、このセットアップが完了した後にのみイベント/入力の処理を開始することができます。
また、単に「サンプル」を実装したり、「ステッパー」/「スイッチャー」を削除したりすることもできません (ただし、これらのことはどちらもやりたくありません)。これについて何か考えている人はいますか?ここで何か誤解しましたか?
haskell - ターン ベースのアスキー ゲームに FRP (特にリアクティブ バナナ) を使用することは理にかなっていますか?
gnugoの ascii インターフェイスのようなものを考えています。ターンは、共進化する (ユーザー入力を可能にするモナディック) ストリームのペアと考えることができます。これは漠然とコンジットを思い起こさせます。
これを行うために既存のライブラリを使用する方法がよくわかりません。
haskell - リアクティブバナナで繰り返されるイベントをどのように削除しますか
リアクティブバナナには、一連の番号を生成するイベントストリームがあり、そのうちのいくつかは連続して数回繰り返されます(すべての重複ではなく、連続した重複だけです)。連続していない重複のみを含むようにそのイベントストリームを変更するにはどうすればよいですか?
変更を使用して、イベントが新しい番号の場合にのみ動作が「変更」されると考えて動作に変換しようとしましたが、代わりに、新しい入力イベントが受信されるたびに動作が変更イベントをトリガーします。
haskell - どのFRPパッケージを選択しますか?
Haskellの関数型リアクティブプログラミングの世界を調べ始めたばかりです。リアクティブな設定でGUIプログラミング(実質的なバインディングのためにgtkを使用)を試してみたいと思います。
今、私はグレープフルーツ、リアクティブバナナ、バスターを少し見てきましたが、いずれかのパッケージを使用することの喜び/恐怖の証をお願いします。
私が持っているのは、これらの予備的な意見だけです。
抽象化されたバックエンドのアイデア(Grapefruitが持っている)については曖昧な感じがあるので、FRPパッケージをgtkにバインドすることを気にしないでください。
型理論は興味深いと思いますが、実際のプログラムの単純なエンコーディングも重視しています。これにより、grapfruit-recordsが少しずれているようです。
つまり、もちろんあなたの何人かが私に他のことを考えるように説得しない限り:-)
haskell - Haskellのreactive-bananaのreactive-webのflatMapに相当するものは何ですか?
別のイベントストリームまたはシグナルの着信値に応じて、次にどのイベントストリームから発行するかを選択するreactive-bananaの関数を探しています(動作?)。scala、reactive-web のライブラリでは、これは次のように行われます。
ありがとう !