2009-08-20 20 views
13

私は継承継承スタイルプログラミングテクニック(C#3.0実装)について読んでいます。継続継承スタイルの使用方法と使用方法

なぜこのテクニックを使用すると便利でしょうか。

本当に長い鎖を得るにはどうしたらいいですか?これはカリング(これはGoogleでより良い検索結果が得られます)と同じですか?

おかげ

答えて

12

C#の文脈におけるCPSのexcellent write-upはウェス・ダイアーによって作られました。私はおそらくそれに意味のある何かを加えることができるとは思わない。具体的なことが不明な場合は、先に進んで質問してください。

+1

+1非常に読みやすいです: "ほとんどのプログラマーはコールバックを取る関数を使用していましたが、関数の完了時に呼び出されるコードがよくあります。 –

+2

"継続性はGOTOの機能と対応しており、コルーチンや例外のような任意の制御フローを表現することができ、最も明るいプログラマの一部を困惑させることがあります。 - 彼らは狂ってしまうことがあります。失敗の継続の継続、成功の継続などを開始することができます。また、数十行のわかりにくいコードで美しいAIエスク操作を行うことができます。 – Eagle

+0

@エージ:私はこの否定的な判断を受け入れることを拒否します。 1つは、継続と後藤を比較するだけではありません。これは遠くに取り出されます。 –

5

あなたの最後の質問に答えるために、連続通行スタイルはカレー化と同じではありません。 1つ以上のパラメータを指定することで、別の関数から関数を作成したときにカレーが発生し、より少ないパラメータで関数を取得できます。 F#やC#などの関数型プログラミング言語をある程度拡張すると、すべての関数を1つの変数の関数として扱うことができます。前記関数が複数のパラメータを有する場合、それはパラメータを有し、残りのパラメータを有する別の関数を返すものとして見ることができる。

public static class FuncExtensions 
{ 
     public static Func<A, Func<R>> Curry<A, R>(this Func<A, R> f) 
     { 
      return a =>() => f(a); 
     } 
} 

Func<int, int> f = x => x + 1; 

Func<int> curried = f.Curry()(1); 

関数カリー化は、常にこののより多くの啓発用途は、もちろんあります。2.を返します。これは、C#でカリー化の一例です。

継続渡しスタイルに関しては、Wes Dyerのブログに加えて、継続のインスタンスであるF#asyncワークフロー、または継続モナドを調べます。あなたは、いくつかの追加の記事を見つけるために継続モナドという用語を使用しようとすることができます。

関連する問題