問題タブ [delimited-continuations]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
273 参照

scala - Scala CPS フレームワークでの一貫性のない動作

各データ依存関数を並行してステップ実行することにより、バッチ データ フェッチを有効にするコルーチン フレームワークを構築しようとしています。これが私がこれまでに持っているものです:http://pastie.org/7147798

  1. これはうまくいきません

    次のエラーが表示されます

    これは機能します

    /li>
  2. これはうまくいきません

    次のエラーが表示されます

    これは機能します

    しかし、次の警告が表示されます

    /li>
0 投票する
1 に答える
370 参照

scala - while ループで Scala の継続を使用する

これは SO の質問の通常の意味に反していることは認識していますが、次のコードは機能しないはずですが、機能します。以下は、while ループで継続を使用する小さな Scala プログラムです。継続渡しスタイルに関する私の理解によれば、このコードは、while ループの反復ごとにスタックにフレームを追加することにより、スタック オーバーフロー エラーを生成するはずです。ただし、問題なく動作します。

出力は次のとおりです。

私の質問は: スタック オーバーフローがないのはなぜですか? Scala コンパイラーは末尾呼び出しの最適化を行っているのでしょうか (継続ではできないと思いました)、それとも何か他のことが起こっているのでしょうか?

(この実験は、それを実行するために必要な sbt 構成と共に github にあります: https://github.com/jcrudy/scala-continuation-experiments。コミット 7cec9befcf58820b925bb222bc25f2a48cbec4a6 を参照)

0 投票する
1 に答える
450 参照

asynchronous - async/await パターンと継続の関係は?

async/awaitパターン (Scala、F#、C# などで知られている) と継続との関係はどうなっているのだろうと思っています。

  • async/パターンはawait本格的な継続の限られたサブセットですか? (もし本当なら、継続はどのようにより表現力豊かになりますか?)
  • 継続はasync/の実装手法の 1 つにすぎawaitませんか? (もしそうなら、他にどのような実装アプローチが存在しますか?)
  • それとも、async/awaitおよび継続は、制御フロー/データフローの抽象化を可能にするという唯一の共通点がある、単なる直交概念ですか?
0 投票する
1 に答える
660 参照

python - Python のパイプライン? - async.js / Haskell の `do` / F# の `|>` を考える

Pythonから継続渡しスタイルをどのように促進できますか?

(正しい表現だと思います)


私のコードは乱雑になり始めていmapます。filterlambda


「パイプライン式」は、さまざまな言語で使用されています。たとえば、次のとおりです。

F#ソリューション (例: |>)

Haskellソリューション (例: dopipes )

JavaScript (例: async.js ):

ただし、この最後の戦略は、非同期関数の応答解決のためのものであることを理解しています (コールバック地獄を参照)。

処理のすべての段階を 1 つの Python 式/行で表すにはどうすればよいですか?

0 投票する
1 に答える
3018 参照

scheme - 「継続プロンプト」とは正確には何ですか?

ドキュメントを解読しようとしています

call-with-continuation-prompt

指定されたに適用procされarg、現在の継続がプロンプトによって拡張されます。プロンプトは によってタグ付けされます。これは、 (デフォルト) または のprompt-tagいずれかからの結果である必要があります。の結果は呼び出しの結果です。default-continuation-prompt-tagmake-continuation-prompt-tagproccall-with-continuation-prompt

「現在の継続でproc指定されたsに適用される」という部分は理解していますが、そこからは意味不明です。arg

継続が「拡張」されるとはどういう意味ですか? また、「プロンプト」はどのようにしてこの「拡張」を行うのでしょうか?

0 投票する
3 に答える
1622 参照

scheme - スキームでyieldとsendを実装する

PythonからSchemeに移植しようとしてyieldいます。yield from

これが私が行った実装です:

この実装の問題は、それを呼び出す方法が Python の のように見えないことですyield

とりわけ、コルーチンを再起動する必要があるたびに、コルーチンを有効にするために新しい変数が必要 です。基本的に、構文が冗長すぎると思います。よりクリーンな構文を持つ別のものはありますか?letreturnexit

コルーチンyield 値を付けることが可能である必要があります。sendコルーチンの使用方法の例を次に示します。

上記では、1は無視され、その後1001000sendジェネレーターに送信されます。@sylwester コードに基づいて実装を行いましたが、マクロに問題があります。

0 投票する
0 に答える
141 参照

haskell - 継続して計算を一時停止

計算を一時停止し、後で要求に応じて (ユーザーからのプロンプトで) 再開しようとしています。継続モナドのみを使用すると、次のようになります。

出力例:

質問の元のバージョン:

0 投票する
0 に答える
162 参照

scala - Scala で区切られた継続を使用した二分木合計

私は Scala をいじっており、バイナリ ツリーの実装などの簡単な例から始めています。関数型プログラミング (OCaml、F#) の予備知識を持っていたので、バイナリ ツリー トラバーサルを末尾再帰にするために継続を使用する一般的なアプローチを再現しようとしていました。Scala の Delimited Continuations についてできる限り読んでいますが、機能させることができませんでした。

この StackOverflow questionから、この動作の OCaml 実装を読むことができます

このShift と Reset を使用したプログラミングの紹介の例に従いましたが、常に型エラーが発生し、それを機能させるために行った変更により正しい結果が得られましたが、関数の末尾を再帰的にすることはありませんでした。

これが私の実装です

また、区切り継続がこの仕事に適したツールであるかどうかも疑問に思っています。この問題は明示的なスタックを渡すことで効率的に解決できることはわかっていますが、Scala で cps を使用する方法を理解したいと思います。