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

haskell - 州およびその他のMTLモナドの適用インスタンス?

のドキュメントを見ると、Control.Applicative特定のモナド(たとえばIOMaybe特に)のインスタンス宣言がありますが、やSTなどのMTLモナドのインスタンスはありません。代わりに、汎用タイプが定義されているように見えます。これは、他のすべてのケースをカバーするためだと思います。StateRWSWrappedMonad

だからここに私の質問があります:

  1. ApplicativeMTLモナドのインスタンスがないのはなぜですか?私がこれまでに自分で見つけた最良の答えは、3年前の投稿で、誰かがこれらのインスタンスを実装し、すぐに無視されました。

  2. どうしたのWrappedMonadRedditに簡単に説明している投稿を見つけましたが、使い方がわからないと思います。

最終的には、(私が推奨したようにState)アプリケーションスタイルで使用できるようにしたいと思いますが、コードにデータコンストラクターを散らかす必要がある場合、それは成功とは思えません。また、完全に無視して、インスタンスを自分で定義することもできます。たとえば、などの場合と同じように、インスタンスを定義します。WrappedMonadWrappedMonadApplicativeIOSTreturnap

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

haskell - Stateモナドをこのように単純に使用すると、スタックオーバーフローが発生するのはなぜですか?

私はStateモナドで遊んでいましたが、この単純なコードでスタックオーバーフローの原因がわかりません。

この コードで問題の原因を知りたいだけです。タスク自体は重要ではありません。

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

haskell - 2つのモナド間で状態を共有する方法は?

私は次のモナドの問題で立ち往生しています:

状態S=(LS、RS)の標準モナド状態があるとしましょう。私は別のモナドも持っています:

StatePを使用して計算を実行してから、Stateモナドの状態と状態をマージします。

動作していませんが、理由がわかりません。そのような機能を実現する別の方法はありますか?

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

scala - scalaz州のモナドを理解しようとしています

リフトプロジェクトでscalazを使い始めようとしています。その目的のために、私はスタイルに合うようにいくつかのコードを書き直しています。ユーザーにログインするためのコードを考えてみましょう。

したがって、これはどういうわけか状態モナドを使用して書き直す必要があります。しかし、私はどうやって得られないのですか。これを試してみてください:

UPD:回答によると、例を更新しました。

gets、、などの使用方法を示す、scalazの状態モナドに関する優れたチュートリアル/説明はありputますか?

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

haskell - haskell における異なる相互作用レベルの状態

私は4ビットのマイクロプロセッサをエミュレートしています。レジスタ、メモリ、および実行中の出力を追跡する必要があります (フェッチ実行サイクル カウンターもあるというボーナス ポイント)。私はモナドなしでこれを行うことができましたが、一度に多くのものを明示的に渡すのは面倒です。また、関数定義はごちゃごちゃしていて、長くて読みにくいです。

私はモナドでこれをやろうとしましたが、うまくいきません。個別の状態コンポーネントをすべて 1 つの型として扱ってみましたが、値を何にするかという問題が残りました。

意味のある唯一のタイプでした。しかし、その時点で、なぜ気にする必要があるのでしょうか。複合型から文字列を取り出して値として扱うことで、分割しようとしました

RUNNING 出力が必要だったという事実を除いて、これはうまく機能しました。私が何をしても、文字列と状態の両方を同時に保持することはできませんでした。

今、私はモナドトランスフォーマーに取り組もうとしています。さまざまなレベルの状態をすべて分離する必要があるようです。しかし、私の頭は急速に爆発しています。

FEcycle カウンターもまだ入れていません!

質問:

  1. 私は正しい軌道に乗っていますか?
  2. モナドトランスフォーマーを引き抜いているのを見て、「実行中の出力」を状態として扱うのをやめて、それを IO モナドにパームオフすることは可能ですか? それを保持する代わりに、印刷するだけでよいのです。
  3. 状態を何層に分ける必要がありますか? 2 つの異なる層が見えますが、それらは互いに密接に依存しています (メモリとレジスタの両方が、メモリとレジスタの両方の状態に依存しています)。ひとつにまとめておくべきか、バラバラにして積み上げるべきか。最も読みやすいコードを生成するアプローチはどれですか?
0 投票する
2 に答える
969 参照

haskell - 状態の管理 - SICP の第 3 章

私はコンピュータープログラムの構造と解釈に取り組んでおり、Haskell の演習を完了しています。最初の 2 つの章は問題ありませんでしたが (コードはgithubにあります)、第 3 章ではさらに難しく考えさせられます。

まず、銀行口座を例に、状態の管理について説明します。make-withdraw関数を次のように定義します。

次のコードを実行できるようにします。

Haskell でこれをエミュレートする方法がわかりません。私は最初に State モナドを使ったいくつかの単純な関数を考えました:

これにより、コードを実行できます

しかし、それはスキームコードとは異なることをします。理想的には、次のようなものを実行できます

しかし、関数の書き方がわかりませんmakeWithdraw。何かアドバイス?

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

arrays - STArrayを使用したHaskell並列計算

並行して計算を行い、結果をSTArrayに書き込もうとしています。このコードは、私がやろうとしていることを示していると思います。ただし、コンパイルエラーが発生します。

これはどのようにすればよいですか?

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

haskell - 「LearnyouaHaskell」のStateMonadコードに関する混乱

私はオンラインブックLearnyoua Haskell forgreatGoodを使用してHaskellを把握しようとしています

私の知る限り、州のモナドを紹介する章にたどり着くまで、これまでモナドを理解することができました。

ただし、提示され、StateタイプのMonad実装であると主張されているコード(Hoogleで見つけることができませんでした)は、処理するには多すぎるようです。

  • そもそも、その背後にある論理、つまり、なぜそれが機能する必要があるのか​​、そして著者がこの手法をどのように検討したのかを理解していません(おそらく関連記事やホワイトペーパーを提案できますか?)

  • 4行目では、関数fが1つのパラメーターを取ることが提案されています。
    ただし、数行下には、パラメーターをとらないpopが表示されます。

  • ポイント1を拡張するために、状態を表す関数を使用して作成者が達成しようとしていることは何ですか。

何が起こっているのかを理解するのに助けていただければ幸いです。

編集

ご担当者様、

以下の答えは私の質問を完全にカバーしています。
ただし、追加したいことが1つあります。

以下に提案する記事を読んだ後、上記の2番目のポイントに対する答えを見つけました:その間ずっと、pop関数次のように使用されると思い
stuff >>= popました:バインドタイプでは2番目のパラメーターは関数ですが、正しい使用法はこれですpop >>= stuff、これをもう一度読んだ後、do-notationがプレーンなbind-lambdasにどのように変換されるかを理解しました。

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

haskell - Haskell でのモナドの結合

Haskell 学習演習としてスパイダー ソリティア プレーヤーを作成しようとしています。

私の関数は、ゲームごとに 1 回main関数を呼び出し( を使用)、ゲーム番号と乱数発生器 ( ) を渡します。この関数はモナドと IO モナドを返す必要があります。IO モナドには、ゲーム テーブルを表示し、ゲームが勝ったか負けたかを示します。playGamemapMStdGenplayGameControl.Monad.StateStringBool

戻り値Stateのモナドとモナドを組み合わせるにはどうすればよいですか? IO`playGame の型宣言はどうあるべきか?

State IO (String, Bool)正しいですか?そうでない場合、それは何ですか?

main、使用する予定です

これは正しい呼び出し方playGameですか?

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

compiler-optimization - SSAでの副作用追跡

私はJavaバイトコードのオプティマイザーに取り組んでおり、SSAを使用することにしました。ただし、ほとんどの最適化ではすべての操作が純粋に機能する必要があるため、副作用を処理するために、副作用を引き起こす可能性のあるすべての操作に不透明な状態パラメーターと戻り値を追加することにしました。これにより、副作用のある操作の最適化や並べ替えを防ぐことができます。たとえば、例外処理を無視すると、この擬似コードのようなものが得られます。

私がしていることの名前はありますか?それは良いアプローチですか?関数型言語にはモナドと呼ばれる概念があると聞きました。これは似ているように聞こえますが、同じではありません。モナドを使用する方が良いアプローチですか?もしそうなら、どうすればモナドを使用するようにこれを変更できますか?