問題タブ [callcc]

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 に答える
127 参照

scheme - 次の call/cc 式を実行します

私はラケットを使用4し、次の単純なコードの結果を得ました。

このコードを段階的に実行するつもりでした。

まず、最初のものを次のようなlet/cc形式に変更しました。call/cc

もちろん、これ4も生産します。

第二に、私は次の4つのステップを行うcall/ccというインターネットのメカニズムを見つけたので:call/cc

  1. 現在の継続をキャプチャします。
  2. 引数を 1 つ取る関数を構築し、Cその引数値で現在の継続を適用します。
  3. この関数を引数としてexpr--- に渡します。つまり、 を呼び出します(expr C)
  4. を呼び出さ(expr C)ない限り、 を評価した結果を返します。この場合、に渡された値が返されます。exprCC

したがって、最初のcall/ccように上記の手順に従いました。

  1. 現在の継続はアイデンティティです。
  2. Cを指し(λ (x) x)ます。
  3. exprであるため(λ (done) ((let/cc esc (done (+ 1 (let/cc k (esc k))))) 3))、次の(expr C)とおりです。

    /li>
  4. 上記のコードの結果値を返すために、racket で上記を実行します。

ただし、上記のコード (私が変更) は実行されず、エラーが発生します。

私が間違ったことをしてください。私は継続の概念を混乱させています。ありがとう。

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

ruby - Ruby でヒープをチェックポイントして復元する

Rubycallccは現在の継続をキャプチャします。これを後で呼び出してコントロールを復元できますが、データは復元できません。現在の記憶のイメージとともに、現在の続きを捉えたいと思います。

ヒープをキャプチャすることはそれほど難しくないように思えます。ObjectSpace::each_objectObjectSpace::dump_all、またはMarshal.dump、または単にに頼ることができますObject.clone。ただし、ヒープを復元する簡単な方法はわかりません。理想的には、object_id -> object マップをトラバースして、すべてのオブジェクトの古いイメージを復元します(対応するオブジェクトが GC されていobject_idた場合は再度追加します)。object_id当然のことながら、これを可能にする Ruby レベルの API はありません。私が使用できる Ruby の GC への低レベルのフックがあるかどうか疑問に思っています。

代替アプローチに関する提案を含め、どんな助けも大歓迎です。

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

javascript - 継続モナドで使用するためのエスケープ継続メカニズムを提供するように callcc を適用する方法

継続渡しスタイルと非同期制御フローを処理するために、Javascript で継続モナドを実装しようとしています。学習のための継続モナドは次のとおりです。

を除いてcont.ap、その利点は私には明らかになりませんが、すべて正常に動作します。

ここで、Javascript の同期制御フローのthrow/メカニズムを模倣したいと思います。http://hackage.haskell.org/に記載されているように、継続モナドで使用するためのエスケープ継続メカニズムを提供するため、適合しているようです。catchcallcc

しかし、申請方法がcallccわかりませんし、そのような申請について説明している適切な情報源も見つかりませんでした。