計算式はモナドと同じですか?


22

私はまだ関数型プログラミング(f#を使用)を学んでおり、最近計算式について読み始めました。私はまだ概念を完全には理解していません。モナドに関するすべての記事を読んでいるときに確信が持てない1つのこと(それらのほとんどはHaskellに基づいて書かれています)は計算式とモナドの関係です。

すべてを書いたので、ここに私の質問です(実際には2つの質問)。

すべてのF#計算式はモナドですか?すべてのモナドをF#計算式で表現できますか?

この Tomas Petricekの投稿を読んだことがあり、よく理解できれば、計算式はモナド以上のものであると述べていますが、これを正しく解釈できるかどうかはわかりません。


@Raphaelは、langタグを削除する理由は何ですか?
グジェゴシSławecki

2
私たちは概念に関心があるので、ここではほとんどのことを言語に依存しないようにします。私は(取り外しF#が質問に何をするか分からない、私は私だけのF#タグを削除して、それはそれはF#のだということが重要だ場合、その後の質問はここofftopicですが、それはボーダーラインのケースだと思います)。経験則:F#はCSの概念ではないため、タグは不要です。(はい、私は他のPLタグを知っていますが、それらも好きではありません。いくつかの質問について、コミュニティはこれらのタグを正当化することを決定しました。)
ラファエル

1
@Raphael質問は確かに境界線のケースだと思います。誰かがここに移行することを決めましたが、ここでも少し話題から外れているようです。質問自体は一種のコンピューターですが、同時に、回答と質問の両方がf#に特に関連しています。私はあなたの経験則を理解しています、説明をありがとう。
グジェゴルツスワヴェツキ14

回答:


22

まず第一に、計算式は言語の特徴であり、モナドは数学的な抽象化であるため、この観点からは、それらは完全に異なるものです。

しかし、それはあまり有用な答えではありません:-)。計算式は、モナド構造を持つ計算(またはデータ型)を使用したプログラミングに使用できる構文を提供する言語機能ですが、他の構造でも使用できます。詳細については、私のF#計算式動物園の論文を読むことができますが、計算式は以下で使用できます。

  • モナドだけでなく、加法モナド(Haskellersが呼ぶMonadPlusまたはMonadOr
  • 構成された計算(Haskellersがモナド変換子と呼ぶもの)
  • モナドですが、例外処理のような他のF#構造をサポートする計算
  • モノイド(およびモナドバインドのないいくつかのバリエーション)
  • 該当するファンクター(これは研究拡張機能でのみ実装されます)

したがって、計算式は確かにモナドに密接にリンクされていますが、モナドには密接にリンクされていません。これは、たとえば、Haskellのdo表記法とは対照的です。Haskellの表記法は、モナドとより密接にリンクしています(ただし、厳密に数学的にモナドではない計算でも使用できます)。


3
モナド変換子は、あるモナドを別のモナドに変換する一般的な方法です-F#計算式は、変換自体ではなく、その変換の/ result /の直接実装のみを実際にサポートします。
GS -モニカに謝罪

1
@GaneshSittampalam-はい、あなたは正しいです。ここで単純化する試みはそれほど便利ではありませんでした:-)。計算式は、モナド変換器を適用した結果である計算を処理するための構文を提供できます(基礎となるモナドと合成モナドの構文が異なる可能性があります)
Tomas Petricek 14

5

計算式を使用してモナドを表現できます。ここに例があります。また、既に述べたように、計算式は単なるモナド以外にも使用できます。ここでそれらがどのように異なるかについての拡張説明があります。ここには違いを適切に説明するスペースはありませんが、計算式は通常のF#構文を再利用し、追加の抽象化を追加できるという点でモナドとは異なります。制限は、計算の種類を超えた多態的な計算式を書くのが非慣用的(かつ困難)であることです。


1
少なくともリンク先のページの資料を要約することで、回答をより充実したものにしてください。2つのリンクが機能しなくなると、現在の答えはまったく意味がなくなります。
デビッドリチャービー14

2
何を言っているのか分かりません。質問に明示的に回答し、質問者が興味を持っている場合は詳細情報へのリンクを提供しました。質問に答えるためにリンクは必要ありません。
N_A 14

1
私もすることはできません想像する 2つのリンクが今までに作業を停止できることが:-)
トマスPetricek
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.