問題タブ [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 投票する
3 に答える
995 参照

haskell - Haskellのハッシュマップ/セットの状態モナドバージョンはもうありませんか?

ハッシュセットとマップへのモナディックインターフェースはHaskellでなくなっていますか?最新バージョンを使用する場合、どのようなパフォーマンスモデルを念頭に置く必要がありますか?(Data.Map、Data.HashMap、Data.HashSet)。私が持っているバージョン(ghc 7.0.2)ではIOコードがないようです。

0 投票する
3 に答える
1130 参照

data-structures - State-Monad を使用した Haskell のクラス set メソッド

私は最近、Haskell の Monad - State を見てきました。このモナドで動作する関数を作成できましたが、動作をクラスにカプセル化しようとしています。基本的に、Haskell で次のようなものを複製しようとしています。

誰かがこれを手伝ってくれるなら、私はとても感謝しています。ありがとう!

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

haskell - CheckingFuelMonad を Hoopl の State モナドと組み合わせるにはどうすればよいですか?

私はHooplライブラリを使用しており、書き換え中に何らかの状態を保持したいと考えています。State書き換え関数は、使用されるモナドに関してポリモーフィックですが、モナドをライブラリのモナドの 1 つと組み合わせる方法がわかりませんFuel

以下は最小限の例です。MyMonadHooplCheckingFuelMonadとフラグを持つStateモナドを組み合わせたシノニムです。Stmt私の中間言語の単なるプレースホルダーであり、それほど重要ではありません.

しかし、これはコンパイルされません -- GHCrewriteは間違った型を持っていると文句を言います:

私がやりたいことは可能ですか?rewrite関数を正しく記述するにはどうすればよいですか?

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

haskell - StateMonadic関数内のrunStateが機能しない

私は、セルのグリッドを含み、グリッドをナビゲートするためにランダムな動きを選択する「AI-AModernApproach」本の問題2.8を解決しようとしています。

2.7 X mの長方形の部屋の環境を実装します。ここで、各正方形には5%の確率で汚れが含まれ、nとmは8から15までの範囲からランダムに選択されます。

2.8帰宅の要件を無視して、演習2.7の環境用の純粋な反射エージェントを設計および実装し、そのパフォーマンスを測定します。

そのため、2つの状態モナドを使用しました。1つGridは状態として、もう1つは状態として使用しStdGenました。コードはエラーなしでコンパイルされますが、GHCiから実行すると、スタックして戻りません。

コードの関連部分:

サポートコード

メインコード

simulateOnGrid私はこのようにGHCiから関数を呼び出します:

そしてコードは次の行でスタックします:

これは、コードにトレースを入れることで確認しました。関数の呼び出しdoActionは発生しません。

runState関数内での使用に問題があるようですがrunCleaner、理由がわかりません。

その理由と、この問題を解決する方法があるかどうかを説明してください。

また、runStateモナディック関数の内部で使用することは私には間違っていると感じます。それを行うためのより良い方法があるかどうかを提案してください。

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

haskell - 複雑な状態のモナド構造

私はまだHaskellの初心者であり、今は頭がおかしいと思います。次のようなコードがあります。

私の焦点(今のところ関数のエラーケースを無視する)は、基になるデータ型が関数に必要なインターフェイスを実装していると仮定して、(<=>)や(<+>)などの関数をチェーンできるようにすることです。

状態モナドを使用してこれを大幅にクリーンアップできるように感じますが、IntStack、BoolStackなどを実装するデータ型を変更できるように構造化する方法がわかりません。

これがひどく漠然とした説明であることは知っていますが、上記のコードはおそらく絶対に間違った方法だと思います。

フィードバックをありがとう!

0 投票する
3 に答える
13733 参照

scala - Scalaz 状態モナドの例

scalaz 状態モナドの例はあまり見たことがありません。この例がありますが、理解するのが難しく、スタック オーバーフローに関する他の質問が 1 つだけあるようです。

私が遊んだいくつかの例を投稿するつもりですが、追加のものを歓迎します。initまた、なぜ、modifyputおよびがそのために使用されているかについての例を誰かが提供できれば、getsそれは素晴らしいことです。

編集:これは状態モナドに関する素晴らしい 2 時間のプレゼンテーションです。

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

scala - scalaz List[StateT].sequence - パラメータ n の暗黙の値が見つかりませんでした: scalaz.Applicative

Scalaz ステート モナドの例の回答へのコメントに基づいて、StateT2 つのステート トランスフォーマーを組み合わせる方法を見つけようとしています。State

私は非常に近いようですが、申請しようとしたときに問題が発生しましたsequence

だから私はStateT[StateMap, Random, Int]、最初のランダムで空のマップ状態でアンラップできるものを持っているところまで行きました:

StateTここで、それらのリストを生成して使用sequenceし、 を呼び出せるようにしたいと思いますlist.sequence ! new Random(1L) apply Map[Int,Int]()。しかし、これを試してみると、次のようになります。

何か案が?可能であれば、最後のストレッチに多少の助けを借りることができます。

0 投票する
5 に答える
8099 参照

haskell - STモナド==コードの臭い?

私はHaskellでUCTアルゴリズムの実装に取り​​組んでいますが、これにはかなりの量のデータジャグリングが必要です。詳細に立ち入ることなく、これはシミュレーションアルゴリズムであり、各「ステップ」で、検索ツリーのリーフノードがいくつかの統計プロパティに基づいて選択され、そのリーフに新しい子ノードが構築され、それに対応する統計情報が表示されます。新しいリーフとそのすべての祖先が更新されます。

そのすべてのジャグリングを考えると、私は検索ツリー全体を岡崎のような不変のデータ構造にする方法を理解するのに十分なほど鋭敏ではありません。代わりに、私はSTモナドを少しいじって、可変STRefのsで構成される構造を作成してきました。不自然な例(UCTとは無関係):

明らかに、この特定の例は、を使用せずに作成する方がはるかに簡単ですSTが、うまくいけば、これをどこに使用するかが明確になります...この種のスタイルをUCTのユースケースに適用する場合、それは間違っていますか?

数年前に誰かがここで同様の質問をしましたが、私の質問は少し違うと思います...必要に応じてモナドを使用して可変状態をカプセル化することに問題はありませんが、それが「適切な場合」の句です。ゲッターとセッターを備えたオブジェクトがたくさんあるオブジェクト指向の考え方に時期尚早に戻ってしまうのではないかと心配しています。正確には慣用的なHaskellではありません...

一方、それいくつかの問題の合理的なコーディングスタイルである場合、私の質問は次のようになると思います:この種のコードを読みやすく保守しやすくするためのよく知られた方法はありますか?私はすべての明示的な読み取りと書き込みにうんざりしていて、特にモナドSTRef内の私のベースの構造からST外の同形であるが不変の構造に変換する必要があることによってうんざりしています。

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

haskell - Haskell:状態で繰り返します。私が望む動作を強制する方法は?

これは SO に関する私の最初の投稿であり、Haskell には比較的慣れていないため、間違いや私のコードが慣用的でない場合はご容赦ください。

a、f(a)、f(f(a))... の次の 2 つの直感的な説明を考えてみましょう。

A. 以下を含むリスト: a、a への f の適用、それへの fの適用、それへの f の適用...

B. i 番目の位置に i ネストされた f から a への適用を含むリスト。

私の問題はiterate、Haskell の関数を使用してAを実行しようとして火傷を負ったことです。私の実際のアプリケーションはシミュレーションですが、次の不自然な例が問題を浮き彫りにしています。

これらの定義により、

結果:

明らかに、AではなくiterateBです! 関数は入力リストに何かを追加するだけなので、状態に関係なく、結果が になる可能性はありません!stepstep ["foo"]["bar", "bar"]

私はここで何が起こっているのかを理解していると言わせてください.step f(a))、状態が変更されたため、2 番目のリスト項目から取得されるのではなく、再計算されます。また、実際のアプリケーションでは、累積リストをステート内に配置することでこれを回避できることにも気付きました。

それにもかかわらず、これを投稿する理由は 2 つあります。

まず、ポイントは、実際にはBiterateを実行するときに、初心者がAを実行すると誤解する可能性がある方法で頻繁に説明されることです。これには、Learn You A Haskell (それ以外の場合は非常に便利だと思います) が含まれますが、SO への投稿 (たとえば、hereおよびhere ) も含まれます。実際、LYAHFGG の口頭での説明は、ほぼ正確に上記の定義Aです。したがって、これが原因でバグが発生し、説明を探している他の Haskell 初心者のためのリソースとして、これに関する投稿を行うと役立つ場合があります (したがって、より正確で、技術的で、より適切な言い回しの説明を、Aとの違いiterate以下B)。

第二に、実際にA !を実行する関数があるかどうかに興味があります。つまり、上記のステートフルな例で、[a, b = f(a), f(b), ...] というリストを作成するにはどうすればよいでしょうか? 言い換えれば、与えられた

そのために

望ましい結果が得られます

example2を使用してどのように書き換えることができiterateますか?

初心者 Haskell リストに、のメモ化バージョンに関する関連する質問iterateが投稿されました。ただし、そのクエリには回答がなかったようです。

怠惰が私のアプリケーションの問題であるかどうかは完全にはわかりません。の厳密なバージョンはiterate私が望むことをしますか? 以下のような私自身の素朴な「厳密な反復」は、何の違いもないようです。

このすべてに関する洞察をいただければ幸いです。

0 投票する
3 に答える
1326 参照

haskell - 「instanceShowStatewhere」はコンパイルされません

これは私が理解しようとしている州のモナドコードです

ghciプロンプトのアクションgetStateを確認できるように、StateをShowのインスタンスとして作成しようとしています。putState count

チュートリアルやStateMonadの資料へのリンクもいいでしょう。