質問

継続はモナドと言えるでしょうか?それらはモナドのサブセットですか、それともモナドを実装する単なる方法ですか?

編集: あるいは、私が勘違いしたのかもしれませんし、 モナド よりも抽象的な概念です 続き?(つまり、ここでは実際にリンゴとオレンジを比較しています)

役に立ちましたか?

解決

モナドの「バインド」は引数として有効な継続(「計算の残り」のラムダ)を要するため、

簡潔には、モナドはその意味で継続されています。以下にその他のリンクの数によって示唆されるように、フリップ側では、継続渡しスタイルを効果的に、単項構文糖を使用して、非CPS言語で実装することができる。

Haskellではチュートリアル 'モナドについてのすべて' から:

https://www.haskell.org/haskellwiki/All_About_Monads#The_Continuation_monadする

「ブレーク」を実装し、「続ける」ために使用されるF#継続モナドのためのためのスタイルのループ

http://cs.hubfs.net/forums/thread/9311.aspx

そして、F#で問題に継続モナドを適用する例:

http://lorgonblog.spaces.live.com/blog /cns!701679AD17B6D310!256.entryする

他のヒント

は、継続モナドあるだけでなく、彼らはあなたが継続し、状態を持っている場合は、あなたが任意の機能モナドをシミュレートすることができるという意味で、普遍的なモナドの一種です。この印象的なしかし、高度に技術的な結果は、アンジェイFilinski での印象的かつ高度な技術の心から来ています1994またはその付近に書いた人:

  

我々は、そのユニットと拡張操作は純粋に機能的な用語として表現可能である任意のモナドは「構成可能継続」とコールバイ値言語に埋め込むことができることを示します。

そうする必要はありませんが、そうすることもできます。あなたの質問を少し逆にして、モナドは継続を実装する方法であると言いたいと思います。ただし、継続はさまざまな方法で実装できます。C# では、ささやかなながらも制約のある CPS の複製を、それほど労力をかけずに実行できます。 例えば. 。見て 継続モナド Haskell サイトからアクセスして、非常に徹底的な処理を行ってください。

そのトピックには非常に素晴らしい記事: http://blog.sigfpe.com/2008/12/マザー・オブ・オールmonads.htmlする

継続はプログラム内の特定の関数です。モナドは型コンストラクタです。

モナドではないでしょう型Cont<T>を服用継続のための型コンストラクタのTます。

しかし、Cont<Cont<T>>はモナドであり、これは一般に「継続モナド」と呼ばれるものです。

(言語の持つcallccがCont<Cont<T>>からTへ変換することができることと等価である。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top