問題タブ [continuation-passing]
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.
haskell - 継続渡しスタイル - 関数合成
私は Racket で CPS について学んでおり、これらの関数を書き上げることができました。
それらは正しく動作しているようです
これらの関数がまだ「真の CPS」であるかどうか疑問に思っています。これらの関数で「真の」継続渡しを台無しにしましたか? CPS で関数構成手法を使用することはコーシャですか? 奨励されていますか?それとも、これを行うことは「妥協」と見なされますか? それを行うためのよりCPS-yの方法はありますか?
はい、5 つの質問をしたことはわかっていますが、それらすべての背後にある基本的な考え方 (正しく理解しているかどうかはわかりません) は同じです。他の Lisp、Haskell、Erlang、または他の関数型言語での説明は問題ありません。
serialization - 非同期ロジックを簡素化するための Lua コルーチン/継続シリアライゼーションの実際の使用法は?
LuaのPluto ライブラリは、Lua コルーチンをシリアライズできると主張しています。これは、非同期プログラミングを同期スタイルで書き込み可能にするための重要な機能である「シリアル化可能な継続」を意味すると解釈します。
たとえば、名前付きのエントリ ポイントを必要とする代わりに、ワークフローを直線的に表現できます。
それ以外の
以前のスタイルに変換された if ステートメントは悪くありませんが、ローカル変数、ループ、ネストされた関数呼び出しなどが含まれると、事態は非常に複雑になります。
ここで、シリアライズ可能な継続が非常に重要になります。
シリアル化された継続は、JavaFlow、Cocoon (Rhink)、Seaside、PLT スキーム、SICS で使用され、ビジネス ワークフロー、医療診断、および (私の場合) テキスト アドベンチャー ゲームの処理に最適です。
Lua と Pluto がこのように機能を活用し、非同期環境でロジックを簡素化するために継続を使用する例 (オープン ソースを希望します!) はありますか?
scala - Scalaの継続を持つイベントリスナー
次のようにGUIコードを作成する必要があるとします。
Scalaの継続を使用して、CPSスタイルでどのように記述しますか?
recursion - The Little Schemer の p.137 の続きの例を説明してください。
問題のコードは次のとおりです。
私はこれを一日中見つめていましたが、まったく理解できないようです。再定義している関数を再利用するcol
と、例では元の定義を使用しているように見えます。どうせ変わらんでしょ。newlat
パラメータとを渡さずに、どうすればそれを繰り返すことができますかseen
。
ピースが欠けているように見えるので、私の質問を説明するのは難しいです。おそらく誰かが本よりも明確なウォークスルーを提供できれば、それがどのように機能するかを理解できるかもしれません.
haskell - グラフ構築中の継続渡しスタイル (CPS)
サブディビジョン サーフェスのライブラリに取り組んでいます。メッシュ トポロジを表すために、一種の分割頂点ラス データ構造を使用しています (左側の図を参照)。
グラフとしても見られるメッシュの構築中に、まだ存在しない別のノードを指すノードを作成します (右側の図を参照 - 破線の矢印は将来のリンクを表します)。古典的な解決策は、空のポインターでノードを作成し、別のポインターが作成されたときにそれを更新することです。私はHaskellに取り組んでいるので:)そしてコードの暗い面(不純物)に行きたくないので、データを更新せずにメッシュ(グラフ)を構築できるかどうか疑問に思っています。CPS(Continuation Passing Style)でうまくいくと思いますが、方法がわかりません。
それはただの夢ですか?
アップデート
私の質問を少し明確にさせてください。直接リンク (ポインター) を使用してノードを作成する方法を探しています。直接リンクとは、中間テーブルやマップがないことを意味します。そのような単純なデータ定義:
私が間違っておらず、実行可能である場合、CPS はグラフの効率的な作成 (ノードの更新なし) と効率的な横断 (マップのルックアップなし) を可能にします。一方、グラフは完全に不変になります。つまり、リストの末尾を変更するなど、単一の変更をグラフ全体に伝播する必要があります。
私が間違っている?いいえの場合、どうすればよいですか?
f# - これを CPS で記述するには?
私は継続渡しスタイル (CPS) を習得しようとしているので、かなり前に Gary Short によって示された例を作り直しています。私は彼のサンプル ソース コードを持っていないので、彼の例を記憶から作り直そうとしています。次のコードを検討してください。
私がよく理解できないのは、抵抗関数をどのように構築するかです。私はこれを以前に思いつきました:
しかし、もちろん、それは CPS を使用していません。言うまでもなく、それは本当にハッキーに見えますし、コードの匂いのようにも見えるコードがかなり繰り返されているという事実は言うまでもありません。
誰かが抵抗関数をCPSの方法で書き直す方法を教えてもらえますか?
scheme - なぜ継続渡しスタイル
Kent Dybvigによるスキームプログラミング言語(第4版)のセクション3.4で、彼は継続渡しスタイルとは何かを非常に明確に説明しています。彼が2つ の理由を挙げている理由は次のとおりです。
- 継続を実装するプロシージャは任意の数の引数を取ることができるため、複数の結果を継続に渡します。
- CPSでは、プロシージャが個別の継続を取得することもできます...これは異なる数の引数を受け入れる場合があります。
最初の理由はvalues
手順を使用して実行でき、2番目の理由はを使用して実行できるためcase-lambda
、継続渡しスタイルを使用する利点がわかりません。誰かが、継続渡しスタイルが適切である場所、コードをより良く、より明確にするなどの例をいくつか教えてもらえますか?
scala - 継続と理解のために -- 非互換性は何ですか?
私は Scala が初めてで、yield return
C# ステートメントを再現しようとしている継続に頭を悩ませようとしています。
この投稿に続いて、次のコードを書きました。
ご覧のとおり、gen2
コンパイルされていないため、コメントアウトされています。while ループ (「参考文献」を参照) を使用すると、リストの内容を簡単に反復処理できるためgen3
、foreach ループも同様に機能することを期待していました。
コンパイルエラーは次のとおりです。
このエラーが発生するのはなぜですか? while ループよりもクリーンな方法でこれを回避する方法はありますか?
ありがとうございました
scheme - CPS (継続渡しスタイル) に変換
これらの手順を Scheme で CPS 形式に変換するにはどうすればよいですか?
- /li>
- /li>
- /li>
※これは宿題ではありません!