タグ付けされた質問 「continuations」


3
継続とコールバックの違いは何ですか?
私は継続についての啓蒙を求めてウェブ全体をブラウジングしてきましたが、最も単純な説明が私のようなJavaScriptプログラマーをまったく混乱させてしまうのは気が遠くなるような気がします。これは特に、ほとんどの記事で、Schemeのコードによる継続について説明したり、モナドを使用したりする場合に当てはまります。 ついに私は継続の本質を理解したと思うようになったので、私が知っていることが実際に真実であるかどうかを知りたかったのです。私が本当だと思うことが実際には本当ではない場合、それは無知であり、悟りではありません。 だから、これが私が知っていることです: ほとんどすべての言語で、関数は明示的に値(および制御)を呼び出し元に返します。例えば: var sum = add(2, 3); console.log(sum); function add(x, y) { return x + y; } コードスニペットを実行する結果を非表示スニペットを展開 これで、ファーストクラスの関数を持つ言語では、呼び出し元に明示的に戻る代わりに、コントロールと戻り値をコールバックに渡すことができます。 add(2, 3, function (sum) { console.log(sum); }); function add(x, y, cont) { cont(x + y); } コードスニペットを実行する結果を非表示スニペットを展開 したがって、関数から値を返す代わりに、別の関数を続けます。したがって、この関数は最初の関数の続きと呼ばれます。 それでは、継続とコールバックの違いは何ですか?

7
Scalaの継続とは何ですか?なぜそれらを使用するのですか?
Scalaでのプログラミングを終えたばかりで、Scala2.7と2.8の間の変更点を調べています。最も重要と思われるのは継続プラグインですが、それが何に役立つのか、どのように機能するのかわかりません。非同期I / Oに適していることは確認しましたが、その理由を見つけることができませんでした。このテーマに関するより人気のあるリソースのいくつかは次のとおりです。 区切られた継続とScala Scalaの後藤 2.8の味:続き 区切られた継続の説明(Scala) そして、Stack Overflowに関するこの質問: Scala2.8とScala2.7の最大の違いは何ですか? 残念ながら、これらのリファレンスはいずれも、継続の目的やシフト/リセット関数の機能を定義しようとはしておらず、そのようなリファレンスは見つかりませんでした。リンクされた記事の例がどのように機能するか(またはそれらが何をするか)を推測することができなかったので、私を助ける1つの方法は、それらのサンプルの1つを1行ずつ調べることです。3番目の記事からのこの単純なものでさえ: reset { ... shift { k: (Int=>Int) => // The continuation k will be the '_ + 1' below. k(7) } + 1 } // Result: 8 結果が8なのはなぜですか?それはおそらく私が始めるのに役立つでしょう。

3
Task.WhenAllの継続が同期的に実行されるのはなぜですか?
Task.WhenAll.NET Core 3.0で実行しているときに、私はメソッドについて奇妙な観察をしました。単純なTask.Delayタスクを単一の引数としてに渡しましたTask.WhenAllが、ラップされたタスクは元のタスクと同じように動作するはずです。しかし、そうではありません。元のタスクの継続は非同期で実行され(これは望ましい)、複数のTask.WhenAll(task)ラッパーの継続は1つずつ同期して実行されます(これは望ましくありません)。 ここでデモこの動作のは。4つのワーカータスクが同じTask.Delayタスクが完了するのを待ってから、重い計算(でシミュレートThread.Sleep)を続行します。 var task = Task.Delay(500); var workers = Enumerable.Range(1, 4).Select(async x => { Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}" + $" [{Thread.CurrentThread.ManagedThreadId}] Worker{x} before await"); await task; //await Task.WhenAll(task); Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}" + $" [{Thread.CurrentThread.ManagedThreadId}] Worker{x} after await"); Thread.Sleep(1000); // Simulate some heavy CPU-bound computation }).ToArray(); Task.WaitAll(workers); これが出力です。4つの継続は、異なるスレッドで(並列に)期待どおりに実行されています。 05:23:25.511 [1] Worker1 before await 05:23:25.542 …

1
継続モナドを左と右の随伴に因数分解する方法は?
状態モナドは積(左-ファンクター)とリーダー(右-表現可能)に因数分解できます。 継続モナドを因数分解する方法はありますか?以下のコードは、チェックを入力しない私の試みです -- To form a -> (a -> k) -> k {-# LANGUAGE MultiParamTypeClasses, TypeOperators, InstanceSigs, TypeSynonymInstances #-} type (<-:) o i = i -> o -- I Dont think we can have Functor & Representable for this type synonym class Isomorphism a b where from :: a -> …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.