問題タブ [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.
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 の場合、呼び出しは同様のエラーで再び失敗します。display
main
NPE
getPerson2
None
display
もしそうなら、なぜ 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行をコメントアウトすると、コンパイルも行われます。???
明らかに、これは元のコードの蒸留バージョンであるため、すべての要素が目的を果たします。何が起こっているのか、そしてそれを修正する方法についての説明的な助けに感謝します。ありがとう。
multithreading - モナド関数で parMap を使用するにはどうすればよいですか?
私は単項関数 getRate を持っています:
この関数を文字列のリストにマップしたいと思います。通常は、次のようにします。
しかし、getRate への呼び出しごとにネットワーク呼び出しが行われるため、マップを並列化し、各レートが個別のスレッドでフェッチされる (または少なくともキュー間で分散される) ようにしたいと考えています。みたいなことを考えている
ただし、parMapM 関数はなく、parMap はモナド関数では機能しません。
私に何ができる?
haskell - 折り畳みによるモナドアクションの合成
type の関数を考えてみましょう(Monad m) => a -> m a
。例えば:
何度でも応募できるようにしたいです。最初に試したのは
問題は、大規模な場合は機能しないことですn
:
他の方法でも機能しません:
実際、機能するのは($!)
厳密性演算子を使用することです
より良い、またはより慣用的な解決策はありますか? それとももっと厳しいものですか?f
重い関数の場合でも、スタック オーバーフローが発生しやすいです。
UPD:ポイントフルな形式で書いtimes
ても、重いモナドアクションを作成する問題を解決できないことがわかりました。これは fx = Just (x+1) で機能しますが、現実の世界では失敗します: