問題タブ [state-monad]

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.

0 投票する
4 に答える
1632 参照

haskell - 複数の状態値を持つ状態モナド

次の点を考慮してください。

私はこれを結果にしたい23。純粋な Haskell でこのようなものを実装する方法はありますか? このようなことは理解STRefしていますが、通常のHaskellでやりたいだけです(現時点では効率について心配していません)。データ型を作成して のインスタンスにする必要があると思いますがMonad、詳細がわからないため、実際の例が役立ちます。

0 投票する
2 に答える
1847 参照

scala - 理解のための Scala 状態モナド

Michael Pilquist の優れた状態モナドの講義を勉強しています。54 分で 2 つの質問に行き詰まりました。

  1. ofsが の場合Option[FollowerStats]?演算子は何ですか? Scala 2.10.2 の Option に三項演算子が見つかりません

  2. 最後のジェネレーターは、更新されたキャッシュ (ヒットまたはミスがインクリメントされたもの) をStatecheckCache メソッドの結果にどのように戻しますか? 返さStateれたものは破棄されたようで、理解のためにはOption[FollowerStats]

.

理解しようと、理解のために書き直そうとしましたが、助けにはなりませんでした。

更新: 回答のおかげで、ポイント 2 の鍵をつかんだと思います。yield が本質的に言っていることを認識していませんでした:s => (s,())から最後の状態を取得し、値の型を ofs にput置き換えて、重要なのは、yield が文字通り ofs を返すのではなく、State.map として変換されていることを認識していることだと思います。Units =>(s,ofs)

更新 オプションビットを今すぐ理解してください。状態モナドを導出しているにもかかわらず、プレゼンテーションはまだ Scalaz の暗黙を使用していると思います。

0 投票する
1 に答える
332 参照

haskell - 述語を持つ状態モナド

State モナドによく似たものを作成しようとしていますが、述語のリストとそれに伴う状態の遷移関数も保持しています。私が想定している計算の基本的な手順は次のとおりです。

Foo (state, [(pred, t)]) >>= f. に適用fs、降伏しs'ます。次に、各述語を に適用しますs'。一致する述語ごとに、関連付けられた遷移関数を順番に状態に適用します。たとえば[(p1, t1), (p2, t2), (p3, t3)]、 、f、およびと仮定しsます。after f syieldss'と両方の returnの場合、p1 s'yieldを実行してから、計算の結果であるyieldingを実行します。p3 s'Truet1 s's''t3 s''s'''

ここには多くの可動部分があり、これを StateT トランスフォーマーまたは State モナドの上に構築するのが正しいアプローチであるかのように感じますが、どこから始めればよいかわかりません。

これがどうもはっきりしないように感じます。これをより明確にする明確化は大歓迎です。

0 投票する
1 に答える
913 参照

haskell - 状態モナドで Maybe を使う

プッシュ/ポップ/ピーク操作を使用して Haskell に FIFO キューを実装しようとしていますが、これがこれまでに得たものです。

したがって、上記は機能し、キューをプッシュ/ポップ/ピークできます。ご覧のとおり、戻り値の型を Maybe でラップしたので、空のキューをポップしたり、空のキューを覗いたりした場合は Nothing を取得し、それ以外の場合は Just 要素を取得します。

そのため、State モナドを使用して操作を簡単に連鎖できるとも考えました。私は次のように進めました:

よし、うまくいきそうだ。できます:

そして戻ってきます(Just 3,Queue {inbox = [1], outbox = []})、それが私が望んでいたことです。しかし、私は次のようなことはできません:

結果は次のようになります。

これで理由は理解できたと思いますが、自分のやりたいことを実現する方法がわかりません。つまり、 from を使用>>=したチェーンは、popにフィードできる必要がありpushます。StateT トランスフォーマーを使用する必要があるかもしれないと考えていますが、まだよく理解していないため、その機能を実装する方法について助けを求めています。それとも、まったく別の方法でこれを行う必要がありますか? ありがとう。