問題タブ [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.

0 投票する
2 に答える
306 参照

optimization - erlang のパフォーマンス ツール

factorial のような関数を書く場合:

テール コールの最適化は単純ではありませんが、継続解析スタイルで記述すると次のようになります。

または、おそらく非機能化されたもの:

これら 3 つの実装のタイミングを計ると、実行時間は予想どおり同じであることがわかりました。

私の質問は、これよりも詳細な知識を得る方法はありますか? たとえば、関数を実行する際のメモリ使用量を取得するにはどうすればよいですか?スタック メモリをまったく使用しないようにしていますか?

この種のものを検査するための標準的なツールは何ですか?

質問は、関数のスタックの高さをどのように測定するか、それぞれの関数呼び出しのメモリ使用量をどのように判断するか、そして最後にどれが最適かということです。

0 投票する
2 に答える
157 参照

scala - Scala でのシフト周辺の例外処理

スカラ 2.10.2。ランニング

与える

try/catch ブロックを削除すると、すべて問題ありません。Scalaで継続がどのように機能するかをまだ理解しようとしていますが、これは完全に私を逃れています。

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

haskell - 機能適用の順番

私は現在、Haskell が特定の関数を適用しようとする順序を理解しようとしています。次のような関数呼び出しがある場合:

これは、各コードフラグメントが環境の構造を変更する可能性があるプログラムを実行するより大きなプログラムの一部であり、現在の変数の割り当てを追跡します。その場合、haskell が誤って間違った部分を最初に実行しないようにするにはどうすればよいでしょうか? この正確な行を継続スタイルで行うと、次のようになるので、私は尋ねています:

haskell が括弧内の内側の部分を最初に実行すると、順序が乱れるため、プログラムの意味が変わる可能性があります。私はこれを自分で理解できないように見えるので、助けていただければ幸いです。

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

clojure - この継続渡しスタイルの Clojure 関数ジェネレーターはどのように機能しますか?

これは、Joy of Clojure、第 2 版からのものです。http://www.manning.com/fogus2/

次に、階乗を作成します。

私の理解:

  • mm-cps は、fn [n] nを受け取る関数を生成します。
  • 内部の関数fn [nk]は、最初にnkendで呼び出されます
  • 継続関数cont [v]は ( vを指定したkontの部分適用でkを呼び出す) として定義され、最初のパラメーターとして、 nが 2 番目のパラメーターとして定義されます。なぜこれは単に ではなく を使用して書かれるのでしょうか?partial(k (cont v n))
  • 関数が合格した場合、 1accept?に適用して再帰を終了しますk
  • それ以外の場合、デクリメントされた n と継続関数を使用してfn [nk]recurに戻ります。
  • 全体を通して、kontは変化しません。

k決勝まで実際に実行されないのは正しい(k 1)ですか?したがって、評価される前に(fac 3)最初に展開されます。(* 1 (* 2 3))

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

syntax - スキーム記号: 継続渡しスタイルの例

CPSに関するウィキペディアの記事には、Scheme と思われる次のコード スニペットがあります。

他の例や、「pyth&」、「*&」、「+&」の使用法の説明が見つかりません。多くのグーグルは、「=&」や「/&」などの他の形式があることだけを発見しました。

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

haskell - 継続でコードを書き直す

プリミティブ プログラムを評価するコードがいくつかあります。プログラムは、ステートメント (式、ブロック、return ステートメント) のリストです。評価の結果は、最後に評価された式です。returnまた、評価者はステートメントを適切に処理する必要があります(つまり、最初に が発生した後に評価を停止しreturnます)。

このロジックを実装するためNextStepに、現在のステートメントの後に次の評価ステップを作成する特別なコールバック関数 ( ) を渡します。returnステートメントを処理するときに次のステップを呼び出しません:

問題は、このコードを継続モナドでどのように書き直すことができるかということです。および関数で明示的に渡されたNextStepコールバックを取り除きたいです。出来ますか?evalStmtevalBlock

0 投票する
2 に答える
170 参照

javascript - JavaScript を渡す継続

誰かがJavaScriptで継続を渡すという概念を私に説明してもらえますか? このhttp://nathansjslessons.appspot.com/lesson?id=1090を読んで、与えられた演習を解こうとして理解しようとしていますが、解けないようです。

それを行う正しい方法は何ですか?

私はこれを試しました: