問題タブ [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.

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

.net - C# で SelectMany を追加すると linq が新しいモナド型に拡張されますが、VB.net で同じことを行うにはどうすればよいですか?

モナドを説明するYet Another Language Geekの古いブログ投稿では、linq構文を新しい型に拡張するためにC#にSelectMany拡張メソッドを追加する方法について説明しています。

C#で試してみましたが、うまくいきました。VB.net に直接変換しましたが、動作しません。VB.net がこの機能をサポートしているかどうか、またはその使用方法を知っている人はいますか?

動作する C# コードは次のとおりです。

動作しない VB.net コードを次に示します (注: vs2010 で記述されているため、一部の行の継続が欠落している可能性があります)。

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

arrays - mapM のようなものですが、配列用ですか? (arrayMap と同様ですが、不純な関数をマッピングします)

mapArray を使用して可変配列に関数をマップできることがわかりましたが、mapM (および mapM_) のようなものはないようです。mapArray では、その要素を出力できません。次に例を示します。

結果は次のようになります。

Haskell (または、標準の Haskell でなくても GHC) にそのようなものはありますか?

また、配列用のfoldr/foldl関数が見つかりませんでした(変更可能かどうかに関係なく)。それらは存在しますか?

どうもありがとう!

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

functional-programming - 学習演習を探しています:これらのモナドを実装します

新しいプログラミングの主題について学ぶとき、私は通常、パターンに従います。私はそれについて読み、理解し、次にいくつかの例をコーディングして、実際にそれを取得できるようにします。

私はモナドについてたくさん読んだことがあり、それらを理解して理解していると確信しています。私は今、理解を固めるためにいくつかのモナドをコード化して、さまざまなタイプのバインドを実装するために何が必要かを本当に理解したい段階にあります。

問題は、実装する明らかなモナドがあまり考えられないことです。そのため、推奨事項を探しています。できれば、簡単なものとそうでないものを含めた推奨事項のリストが欲しいです。

また、モナドは関数型プログラムで副作用を「カプセル化」するために使用されますが、それよりも一般的であることも認識しています。したがって、副作用といくつかの一般的な副作用の両方をカプセル化するモナドを含めることをお勧めします。

ありがとう!

(補足として:これを行うためにf#を使用しますが、この質問はすべての関数型言語に当てはまると思います)。

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

haskell - Haskellの「do」に関する問題

与えられたリストのすべての数の階乗を計算し、それを画面に出力するHaskell関数を作成しました。

関数は機能しますが、3行目は少しわかりにくいです。「putStrLn」(準?)関数の前に「do」がないのに、コンパイラ(GHC)がエラーを報告しないのはなぜですか?4行目から「do」を省略すると、期待どおりにエラーが表示されます。

私はHaskellとその方法にまったく慣れていないので、過度に愚かなことを言った場合はご容赦ください。

0 投票する
6 に答える
1443 参照

haskell - Haskell のモナドに関するいくつかの質問

私はモナドについて学んでいて、いくつか質問があります。

これが私が今いる場所です。私が間違っているところを修正してください。

  • >>=記号は中置演算子です。中置演算子は、2 つの引数 (左側と右側) を取り、値を返す関数です。

  • >>=シンボルはバインド演算子と呼ばれ、署名がありますMonad m => m t -> (t -> m u) -> m u。ただし、タイプはここに並んでいないようです。type の値を取得しm t、2 番目の引数はt. (ドットを接続する方法がわかりません。)

  • これは、 bind 関数がを取得して関数に渡すために、何らかの方法でmからを削除できることを意味する必要があります。m tt

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

  • そのようなバインド オペレーター内でのみ可能なものmからを削除する機能です。m tこのバインド オペレーターには特別な特権などがありますか?

  • 状態の変化と何の関係がありますか? モナドの目的は、副作用を「ラップ」して、プログラムの残りの部分から分離することだと私は理解しています (私はそう思います)。しかし、これにおける bind オペレーターの役割は何でしょうか?

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

haskell - タイプの Haskell 関数: IO String-> String

テキストのインデックスを作成するために、Haskell で一連のコードを作成しました。トップ関数は次のようになります。

ここで、この関数にファイルから読み取った文字列を渡したいと思います。

readFile のタイプが FilePath -> IO String であるため、これは機能しません。

予想される型 'String' を推測された型 'IO String' と一致させることができませんでした

エラーが表示されますが、次のタイプの関数が見つかりません:

成功の鍵はモナドのどこかにあると思いますが、問題を解決する方法が見つかりませんでした。

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

c# - IMonadのようなものがない理由今後の.NET4.0で

...これらすべての新しい(そしてIEnumerableを数えればそれほど新しいものではない)モナド関連のもので?

これにより、任意のモナディックタイプで動作する関数を作成できます。それともそれほど重要ではありませんか?

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

haskell - haskellでモナドを作成する

自分のモナドを作りたいです。これは私が書いたものです:

しかし、これは機能しません。Ghcは言う:

それのどこが悪いんだい?


iがnより低いときに計算をしたい。nは定数である必要があります。これを正しく行う方法はまだわかりません。それは州と多分のいくつかの組み合わせでなければなりません。何かアドバイスがあれば、遠慮なく私と共有してください:P

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

haskell - 誰かがこのHaskell関数(州のモナド関連)を教えてもらえますか?

put (n+1)この関数の最終結果にどのような影響があるのか​​、私は混乱しています。この関数は初期状態を変更せずに返す必要があるようです。私はこれを頭の中で実行しようとしていますが、物事を所定の位置に保持するためのスペースが不足し続けています。:\

誰かがこの関数の評価を私に教えてくれるなら、それは本当に役に立ちます。

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

haskell - リストモナドを使用して桁ごとのカウンターを実装する

それで、私はここで質問を見て、問題のかなり醜い解決策を構築しました。それをきれいにしようとしている間、私はリスト内包表記とリストモナドを調査し始めました。私がやろうと思ったのは、リストモナドを使用して桁ごとのカウンターを実装することでした。数字の入力シーケンスが与えられた場合、[1, 2]次のような出力シーケンスを生成したいと思いました。

つまり、その範囲内のリスト内のすべての要素のすべての可能な値を反復処理します。

haskell.orgリストのモナドドキュメントには次のように書かれています。

バインドされた関数は、入力リスト内のすべての可能な値に適用され、結果のリストが連結されて、すべての可能な結果のリストが生成されます。

素晴らしい!完璧に見えます...ソリューションを作成するために私が書いたコードは次のとおりです。

しかし、何かを使って呼び出すcountと空のリストが生成され、その理由はわかりません。私は何が欠けていますか?