21

私はモナドについて幼児の理解を持っていることを前もって述べさせてください。私はここでモナドに関するさまざまなスレッドを読み、その概念について数時間研究しました。私はこの用語に満足することはほとんどありませんが、モナドが何であるか/何をするかは一般的に理解していると言っても過言ではありません。

私は仕事のやり方を改善しようとしているC#開発者です。私のMonaducationでさらに役立つのは、C#でのMonadの実際のアプリケーション(つまり、linq SelectMany()などを介した)を確認することです。これは、oldskool C#で同じ種類の問題を解決する他の方法よりも明らかに改善されています。

誰かがそのような獣を見たことがありますか?

4

8 に答える 8

11

これはそのようなシナリオの 1 つです: 構文解析ライブラリー (組み込み DSL の良い例) を作成したいのですが、最適なものはモナディック・パーサー・コンビネーター・ライブラリーであることがわかりました。したがって、LINQ 構文糖を活用して、構文解析している言語の文法と同じ構造を持つ C# コードを作成し、オンザフライのセマンティック分析とエラー回復のための優れたプログラミング モデルの利点を得ることができます。 . 説明については、このブログを参照してください。

于 2009-05-15T05:25:55.987 に答える
5

ピタゴラス数を求める:

  var r = from a in Enumerable.Range(1, 25)
          from b in Enumerable.Range(a, 25-a)
          from c in Enumerable.Range(b, 25-b)
          where a*a + b*b == c*c
          select new [] { a, b, c };
于 2010-01-24T21:18:48.827 に答える
4

そのようなシナリオの 1 つを次に示します。スレッドを保持せずに順次非同期呼び出し (IO など) を行うコードを記述したいが、非同期プログラミング モデル (BeginFoo/EndFoo) によって強制される絶望的なスパゲッティのもつれを記述したくない場合. したがって、モナドと LINQ シュガーを使用して、直線的に見えるコードを記述できますが、スレッド全体を解放/切り替えます。簡単な説明については、このブログを参照してください。

于 2009-05-15T05:22:20.707 に答える
3

http://memoirsofaprogrammer.blogspot.comをチェックしてください

于 2009-05-16T00:47:54.587 に答える
3

1 つの例は、この記事nullで示されているように、Maybe モナドを使用してチェックを単純化することです。

于 2011-10-24T22:20:26.950 に答える
0

モナドを使ったプログラミングは宣言的であり、それを生成する方法の低レベルの詳細ではなく、高レベルで必要なものを記述します。

Channel 9でのBrian Beckman の状態モナドの話の最後にある演習を参照してください。

于 2009-07-15T14:58:47.860 に答える
0

LINQ は、StackOverflow の多くのソリューションで使用されています (また、よく質問されます)。LINQタグを使用して質問を確認すると、実際の使用方法がわかります。

于 2009-05-15T09:35:19.477 に答える
0

私は最近、典型的な命令型の実世界の C# コード ( NuGetの関数) を関数型のモナド スタイル (より具体的にはMaybe モナドを使用) にリファクタリングすることについてブログを書きました。ステップの背後にある合理性を説明しながら、小さなステップでそれを行うために最善を尽くしたので、モナドがどのように役立つかを理解するのに役立つと思います.

于 2011-04-25T17:09:37.980 に答える