問題タブ [monads]
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 - When is it OK to use an IORef?
One thing that has always confused me is whether or not it's an okay time to use an IORef. Are there any guidelines that should be followed when deciding whether or not to use an IORef for a task? When is a good time to use the State monad over an IORef?
haskell - 状態モナド、乱数列とモナドコード
私は状態モナドを把握しようとしています。この目的のために、線形合同ジェネレーターを使用して一連の乱数を生成するモナド コードを書きたかったのです (おそらく良くありませんが、私の意図は状態モナドを学習することであり、良い RNG ライブラリを構築します)。
Boolジェネレーターはこれだけです (簡単にするために s のシーケンスを生成したい):
数値について心配する必要はありません。これは、(Numerical Recipes によると) Ints の疑似ランダム シーケンスを生成するシードの単なる更新規則です。今、乱数を順番に生成したい場合は、次のようにします。
わかりましたので、State Monad を使用することで、このボイラープレートを回避できます。
そして最後に:
BoolOK、これは問題なく動作し、与えられたシードごとに n 個の疑似乱数のリストが表示されます。しかし...
私は自分がしたことを読んで(主にこの例に基づいています:http://www.haskell.org/pipermail/beginners/2008-September/000275.html)、それを複製して他のことをすることができます。しかし、do 記法とモナド関数 (replicateM など) の背後で実際に何が起こっているのか理解できないと思います。
誰かがこの疑問について私を助けることができますか?
1 - nextVal 関数の機能を理解するために desugar しようとしましたが、できませんでした。現在の状態を抽出して更新し、その状態を次の計算に渡すと推測できますが、これは、この do-sugar を英語であるかのように読み取ることに基づいているだけです。
この関数を元の >>= に実際に脱糖し、関数を段階的に返すにはどうすればよいですか?
put2 - 関数と関数が正確に何をするのか理解できませんでしたget。状態を「パック」および「アンパック」していると推測できます。しかし、ドーシュガーの背後にあるメカニズムは、まだ私にはとらえどころのないものです.
さて、このコードに関するその他の一般的な意見は大歓迎です。Haskell を使うと、動作するコードを作成して期待通りの動作をすることができると思うことがありますが、命令型プログラムで慣れているため、「評価に従う」ことはできません。
scala - インタープリターでモナドを使用するポイントは何ですか?
私は最近、モナドを使用したシンプルなインタープリターと呼ばれるこの小さなscalaの例を発見しました:
ここでのモナド計算の使用/利点は何ですか? 実際、Mは恒等モナドに他なりません。これはモナド構文の例を示すために導入されたものですか、それとも重要な効果がありますか?
haskell - Haskell -- 「'do' コンストラクトの最後のステートメントは式でなければならない」
タイトルにあるように:どういうThe last statement in a 'do' construct must be an expression意味ですか?私が見たいくつかの例に示されてdoいるように、ブロックを終了しましたが、エラーが発生しました。putStrLn
コード:
haskell - モナドでブレークスルーをもたらしたプログラミング タスクは何ですか?
マーク・ドミナスは、彼が書いた確率モナドに関する最近のブログ投稿で、「モナド的に、やっとたどり着いたような気がする」と書いた。
私の最初のモナド プログラムは、プロジェクト オイラーの問題 32をparsecとMaybe モナドを使って解決するというぎこちないものでした。
最終的に光があなたのために点灯したとき、あなたは何に取り組んでいましたか? 少なくとも、作成したコードのスケッチを提供してください。あなたが今知っていることを知って、それをどのように改善しますか、そしてその理由は何ですか?
java - クラス Option[T] のポイントは何ですか?
Option[T]Scalaのクラスのポイントがわかりません。Noneつまり、 overの利点がわかりませんnull。
たとえば、次のコードを検討してください。
ここで、メソッドが をgetPerson1返し、 の最初の行でnull行われた への呼び出しが で失敗するとします。同様に、 return の場合、呼び出しは同様のエラーで再び失敗します。displaymainNPEgetPerson2Nonedisplay
もしそうなら、なぜ ScalaOption[T]は Java で使用される単純なアプローチに従うのではなく、新しい値ラッパー ( ) を導入することによって物事を複雑にするのでしょうか?
アップデート:
@Mitchの提案に従ってコードを編集しました。の特定の利点はまだわかりませんOption[T]。null例外的な場合、またはNone両方の場合をテストする必要があります。:(
@Michaelの返信から正しく理解できた場合、唯一の利点は、このメソッドが None を返す可能性がOption[T]あることをプログラマーに明示的に伝えることですか? これがこのデザインの選択の背後にある唯一の理由ですか?
haskell - モナド変換器と複数のモナドのスタッキング
私は署名付きの関数とf署名付きの関数を持っていますf :: [a] -> StateT Int Reader b [c]f'f' :: a -> StateT Int Reader b [c]
f の計算 (非常に単純化されています) は次のようになります。
[c]そしての代わりに…の部分のx ++部分[c]をyモナドのものを巻きつけて返したいと思います。
手動でアンラップせずにそれを達成し、手動で結果を再度まとめる可能性はありxますyか? 単純なコードを取得するには、モナド スタックの一番下に List モナドが必要ですか? Reader モナドは明らかに MonadPlus クラスのインスタンスではありません。
functional-programming - 純粋関数型プログラミングでIOを使用するためのモナドの代替手段は何ですか?
モナドは、IOを処理するためのhaskellソリューションとして説明されています。純粋な関数型言語でIOを処理する他の方法があるかどうか疑問に思いました。
haskell - ParsecでのMonadErrorの使用
MonadErrorをParsecと一緒に使用しようとしています。私は次のコードスニペットを思いついた:
ただし、 catchErrorretはLeft "SomeError"効果がないようです。ここでMonadErrorを使用する正しい方法は何ですか?
たとえば、次の場合のように、Parsec自体のエラー処理よりもMonadErrorを使用したいと思います。
ここでparser1が失敗した場合、parser2は続行されますが、解析を完全に中止する例外があります。
haskell - HaskellとContT、callCCとの混同
ContTと友達を理解するための継続的な探求。以下の(ばかげているが説明的な)コードを検討してください。
このコードはコンパイルされません。ただし、をその下のコメント付きk呼び出しに置き換えるwhenと、コンパイルされます。どうしたの?
または、x2行をコメントアウトすると、コンパイルも行われます。???
明らかに、これは元のコードの蒸留バージョンであるため、すべての要素が目的を果たします。何が起こっているのか、そしてそれを修正する方法についての説明的な助けに感謝します。ありがとう。