問題タブ [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.
haskell - 複数の状態値を持つ状態モナド
次の点を考慮してください。
私はこれを結果にしたい23
。純粋な Haskell でこのようなものを実装する方法はありますか? このようなことは理解STRef
していますが、通常のHaskellでやりたいだけです(現時点では効率について心配していません)。データ型を作成して のインスタンスにする必要があると思いますがMonad
、詳細がわからないため、実際の例が役立ちます。
scala - 理解のための Scala 状態モナド
Michael Pilquist の優れた状態モナドの講義を勉強しています。54 分で 2 つの質問に行き詰まりました。
ofs
が の場合Option[FollowerStats]
、?
演算子は何ですか? Scala 2.10.2 の Option に三項演算子が見つかりません最後のジェネレーターは、更新されたキャッシュ (ヒットまたはミスがインクリメントされたもの) を
State
checkCache メソッドの結果にどのように戻しますか? 返さState
れたものは破棄されたようで、理解のためにはOption[FollowerStats]
.
理解しようと、理解のために書き直そうとしましたが、助けにはなりませんでした。
更新:
回答のおかげで、ポイント 2 の鍵をつかんだと思います。yield が本質的に言っていることを認識していませんでした:s => (s,())
から最後の状態を取得し、値の型を ofs にput
置き換えて、重要なのは、yield が文字通り ofs を返すのではなく、State.map として変換されていることを認識していることだと思います。Unit
s =>(s,ofs)
更新 オプションビットを今すぐ理解してください。状態モナドを導出しているにもかかわらず、プレゼンテーションはまだ Scalaz の暗黙を使用していると思います。
haskell - 述語を持つ状態モナド
State モナドによく似たものを作成しようとしていますが、述語のリストとそれに伴う状態の遷移関数も保持しています。私が想定している計算の基本的な手順は次のとおりです。
Foo (state, [(pred, t)]) >>= f
. に適用f
しs
、降伏しs'
ます。次に、各述語を に適用しますs'
。一致する述語ごとに、関連付けられた遷移関数を順番に状態に適用します。たとえば[(p1, t1), (p2, t2), (p3, t3)]
、 、f
、およびと仮定しs
ます。after f s
yieldss'
と両方の returnの場合、p1 s'
yieldを実行してから、計算の結果であるyieldingを実行します。p3 s'
True
t1 s'
s''
t3 s''
s'''
ここには多くの可動部分があり、これを StateT トランスフォーマーまたは State モナドの上に構築するのが正しいアプローチであるかのように感じますが、どこから始めればよいかわかりません。
これがどうもはっきりしないように感じます。これをより明確にする明確化は大歓迎です。
haskell - 状態モナドで Maybe を使う
プッシュ/ポップ/ピーク操作を使用して Haskell に FIFO キューを実装しようとしていますが、これがこれまでに得たものです。
したがって、上記は機能し、キューをプッシュ/ポップ/ピークできます。ご覧のとおり、戻り値の型を Maybe でラップしたので、空のキューをポップしたり、空のキューを覗いたりした場合は Nothing を取得し、それ以外の場合は Just 要素を取得します。
そのため、State モナドを使用して操作を簡単に連鎖できるとも考えました。私は次のように進めました:
よし、うまくいきそうだ。できます:
そして戻ってきます(Just 3,Queue {inbox = [1], outbox = []})
、それが私が望んでいたことです。しかし、私は次のようなことはできません:
結果は次のようになります。
これで理由は理解できたと思いますが、自分のやりたいことを実現する方法がわかりません。つまり、 from を使用>>=
したチェーンは、pop
にフィードできる必要がありpush
ます。StateT トランスフォーマーを使用する必要があるかもしれないと考えていますが、まだよく理解していないため、その機能を実装する方法について助けを求めています。それとも、まったく別の方法でこれを行う必要がありますか? ありがとう。