問題タブ [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 に答える
742 参照

scheme - call-with-current-continuation - 状態保存の概念

The Seasoned Schemerを読んだ後、私はcall/ccきちんと理解できたと感じました。しかし、いくつかの WOW トリックを見た後、call/cc私が間違っていることがわかりました。

それは私の理解と完全に一致します。call/cc電話に出たとき、プログラムの状態を保存しているだけだと思います。関数でその隣の関数を呼び出します。その関数 ( k) がどこかから呼び出された場合(call/cc ...)、指定されたパラメーターで全体を置き換えるだけです。上記のプログラムもそのように機能したようです


しかし、

3 回呼び出すnextと、0、1、および が生成され'doneます。つまり、それによって与えられstateた関数を使用すると、プログラムの状態が復元されませんでした。私はそれを理解しようとしたことをあなたに示しました。kgenerator


call/ccでは、実際にはどのように機能するのでしょうか。

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

lisp - Common Lisp でのマクロによる継続 -- OnLisp での実装について

On Lisp では、p. 267 で、Paul Graham は、マクロを渡す継続の実装を提供します。

t2次のコードでは、 treeの各リーフのツリーをトラバースし、この実装を使用しています。特に、 のリーフが(最初の要素) から(2 番目の要素) に変更された後、 が呼び出されt1たときに何が起こるのか疑問に思っています。が呼び出されると、単純に からラムダ関数がポップされ、そのラムダ関数が再度呼び出されます。しかし、この呼び出しは最も外側の のスコープ外で行われ、バインディングを担当していました。では、アウターによって導入されたバインディングはどのようにスコープ内にあるのでしょうか?restartt1ABrestart*saved*dft-node(cdr tree)=bind=bind*cont**cont*=bind

最後の形式は次のように展開されます

これにより、 が生成され(a 1)ます。Graham によると、以降の への呼び出しはなどをまでrestart生成し、その後の呼び出しでは、 などを 最終的に まで生成する必要があります。(a 2)(a 5)(b 1)(b 2)(g 5)

の後、確立され(a 1)た のバインディングはもはや適切ではありません。これらの値への後続の呼び出しはどのように行われますか? のスコープは、への別の呼び出しにまだ適用されていますか? ここで何が起こっているのですか?*cont*letrestartletrestart

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

clojure - SICP, Continuation Passing Style and Clojure's trampoline

I am working with SICP and exercise 2.29-b gave me the opportunity to have fun with the Continuation Passing Style while traversing mobiles and branches.

To make the story short, each mobile has left and right branch, which are composed by a length and either a numeric weight or another mobile. The question asks to find the total weight given a mobile.

After the first mutually recursive solution, quite simple, I tried and successfully implemented a cps' one:

At this point, I have tried to apply the trampoline in order to preserve my stack. But it blows with the following exception:

The code using trampoline, following the excellent link, is:

And finally some sample data:

Why does it blow up?

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

f# - 末尾再帰を使用して独自の List.partition を実装するにはどうすればよいですか?

F# の練習用に独自の List.partition 関数を作成しようとしています。これが私の最初の(素朴な)試みです:

これは機能しますが、末尾再帰ではありません。アキュムレータを使用して末尾再帰になる 2 番目の試みをまとめました。

厳密に言えば、これは機能します。リストを分割します。問題は、これがリストの順序を逆にすることです。私はこれを得る:

継続渡しを使用して、リスト要素を逆にしない末尾再帰パーティション関数を作成できると思いますが、継続渡しについてはよくわかりません (それについてはよく読んでいます)。末尾再帰を使用してパーティションを作成し、リスト要素を順番に保つにはどうすればよいですか?

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

scheme - call/cc はスタック フレームのコピーですか、それとも実行中の実際のジャンプですか?

以下が無限ループを設定しない方法がわかりません。

を呼び出すと(return 22)、継続に戻りますが、call/ccフォームの新しい評価結果として渡された値 22 が使用されます。それ(return 22)は次のステートメントとして評価され、無限ループを設定することになりませんか?

無限ループではないことはわかっていますが、そうでない理由がわかりません。

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

php - laravel 5で変数をメールに渡す

電子メールをハードコーディングして送信することはできますが、私の人生では、変数を電子メールを通過させたり、フォームに入力したアドレスに送信したりすることはできません。フォームに入力された電子メールに送信しようとすると、このエラーが発生しますSwift_RfcComplianceException in MailboxHeader.php line 348: Address in mailbox given [] does not comply with RFC 2822, 3.6.2. This is my code is far: first is the form method

これは私のpostメソッドにあるものです:

私はlaravelを初めて使用し、多くの人がそれを気に入っており、簡単なフレームワークであることに気づきましたが、その理由はわかりません笑。これは、asp.net で行う方が簡単でした。助けてください。もしそうなら、事前に感謝します。