問題タブ [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 - Haskellのハッシュマップ/セットの状態モナドバージョンはもうありませんか?
ハッシュセットとマップへのモナディックインターフェースはHaskellでなくなっていますか?最新バージョンを使用する場合、どのようなパフォーマンスモデルを念頭に置く必要がありますか?(Data.Map、Data.HashMap、Data.HashSet)。私が持っているバージョン(ghc 7.0.2)ではIOコードがないようです。
data-structures - State-Monad を使用した Haskell のクラス set メソッド
私は最近、Haskell の Monad - State を見てきました。このモナドで動作する関数を作成できましたが、動作をクラスにカプセル化しようとしています。基本的に、Haskell で次のようなものを複製しようとしています。
誰かがこれを手伝ってくれるなら、私はとても感謝しています。ありがとう!
haskell - CheckingFuelMonad を Hoopl の State モナドと組み合わせるにはどうすればよいですか?
私はHooplライブラリを使用しており、書き換え中に何らかの状態を保持したいと考えています。State
書き換え関数は、使用されるモナドに関してポリモーフィックですが、モナドをライブラリのモナドの 1 つと組み合わせる方法がわかりませんFuel
。
以下は最小限の例です。MyMonad
HooplCheckingFuelMonad
とフラグを持つState
モナドを組み合わせたシノニムです。Stmt
私の中間言語の単なるプレースホルダーであり、それほど重要ではありません.
しかし、これはコンパイルされません -- GHCrewrite
は間違った型を持っていると文句を言います:
私がやりたいことは可能ですか?rewrite
関数を正しく記述するにはどうすればよいですか?
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
モナディック関数の内部で使用することは私には間違っていると感じます。それを行うためのより良い方法があるかどうかを提案してください。
haskell - 複雑な状態のモナド構造
私はまだHaskellの初心者であり、今は頭がおかしいと思います。次のようなコードがあります。
私の焦点(今のところ関数のエラーケースを無視する)は、基になるデータ型が関数に必要なインターフェイスを実装していると仮定して、(<=>)や(<+>)などの関数をチェーンできるようにすることです。
状態モナドを使用してこれを大幅にクリーンアップできるように感じますが、IntStack、BoolStackなどを実装するデータ型を変更できるように構造化する方法がわかりません。
これがひどく漠然とした説明であることは知っていますが、上記のコードはおそらく絶対に間違った方法だと思います。
フィードバックをありがとう!
scala - Scalaz 状態モナドの例
scalaz 状態モナドの例はあまり見たことがありません。この例がありますが、理解するのが難しく、スタック オーバーフローに関する他の質問が 1 つだけあるようです。
私が遊んだいくつかの例を投稿するつもりですが、追加のものを歓迎します。init
また、なぜ、modify
、put
およびがそのために使用されているかについての例を誰かが提供できれば、gets
それは素晴らしいことです。
編集:これは状態モナドに関する素晴らしい 2 時間のプレゼンテーションです。
scala - scalaz List[StateT].sequence - パラメータ n の暗黙の値が見つかりませんでした: scalaz.Applicative
Scalaz ステート モナドの例の回答へのコメントに基づいて、StateT
2 つのステート トランスフォーマーを組み合わせる方法を見つけようとしています。State
私は非常に近いようですが、申請しようとしたときに問題が発生しましたsequence
。
だから私はStateT[StateMap, Random, Int]
、最初のランダムで空のマップ状態でアンラップできるものを持っているところまで行きました:
StateT
ここで、それらのリストを生成して使用sequence
し、 を呼び出せるようにしたいと思いますlist.sequence ! new Random(1L) apply Map[Int,Int]()
。しかし、これを試してみると、次のようになります。
何か案が?可能であれば、最後のストレッチに多少の助けを借りることができます。
haskell - STモナド==コードの臭い?
私はHaskellでUCTアルゴリズムの実装に取り組んでいますが、これにはかなりの量のデータジャグリングが必要です。詳細に立ち入ることなく、これはシミュレーションアルゴリズムであり、各「ステップ」で、検索ツリーのリーフノードがいくつかの統計プロパティに基づいて選択され、そのリーフに新しい子ノードが構築され、それに対応する統計情報が表示されます。新しいリーフとそのすべての祖先が更新されます。
そのすべてのジャグリングを考えると、私は検索ツリー全体を岡崎のような不変のデータ構造にする方法を理解するのに十分なほど鋭敏ではありません。代わりに、私はST
モナドを少しいじって、可変STRef
のsで構成される構造を作成してきました。不自然な例(UCTとは無関係):
明らかに、この特定の例は、を使用せずに作成する方がはるかに簡単ですST
が、うまくいけば、これをどこに使用するかが明確になります...この種のスタイルをUCTのユースケースに適用する場合、それは間違っていますか?
数年前に誰かがここで同様の質問をしましたが、私の質問は少し違うと思います...必要に応じてモナドを使用して可変状態をカプセル化することに問題はありませんが、それが「適切な場合」の句です。ゲッターとセッターを備えたオブジェクトがたくさんあるオブジェクト指向の考え方に時期尚早に戻ってしまうのではないかと心配しています。正確には慣用的なHaskellではありません...
一方、それがいくつかの問題の合理的なコーディングスタイルである場合、私の質問は次のようになると思います:この種のコードを読みやすく保守しやすくするためのよく知られた方法はありますか?私はすべての明示的な読み取りと書き込みにうんざりしていて、特にモナドSTRef
内の私のベースの構造からST
外の同形であるが不変の構造に変換する必要があることによってうんざりしています。
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ではなくiterate
Bです! 関数は入力リストに何かを追加するだけなので、状態に関係なく、結果が になる可能性はありません!step
step ["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
私が望むことをしますか? 以下のような私自身の素朴な「厳密な反復」は、何の違いもないようです。
このすべてに関する洞察をいただければ幸いです。
haskell - 「instanceShowStatewhere」はコンパイルされません
これは私が理解しようとしている州のモナドコードです
ghciプロンプトのアクションgetState
を確認できるように、StateをShowのインスタンスとして作成しようとしています。putState count
チュートリアルやStateMonadの資料へのリンクもいいでしょう。