問題タブ [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.
functional-programming - 継続が取れない!
それらは何であり、何に適していますか?
私はCSの学位を持っておらず、私の経歴はVB6-> ASP->ASP.NET/C#です。誰かがそれを明確かつ簡潔に説明できますか?
smalltalk - Seaside 継続の操作
Squeak で BlockClosure を取得するにはどうすればよいですか (BlockClosure>>callCC を使用したい)?
BlockContext である [#foo] を書くとどうなりますか?
更新: BlockClosure は主に新しいコンパイラのものであることがわかりました。
代わりに、海辺の継続をどのように扱うのですか? 私は問題を抱えています。例を教えていただければ幸いです。
さらなる更新: これの目的は、海辺を (少なくとも直接ではなく) 使用することではなく、独自の状態追跡イテレーターをローリングするよりも簡単な方法でトラバーサルなどを記述することです。
java - Java:RuntimeExceptionを使用して訪問者から脱出する
私は、Javaプログラムの短絡制御フロー構造として、チェックされていない例外を使用するように強く誘惑されています。ここの誰かがこの問題を処理するためのより良い、よりクリーンな方法について私にアドバイスしてくれることを願っています。
アイデアは、すべてのメソッド呼び出しで「停止」フラグをチェックすることなく、訪問者によるサブツリーの再帰的な探索を短縮したいということです。具体的には、抽象構文ツリーの訪問者を使用して制御フローグラフを作成しています。ASTのreturn
ステートメントは、サブツリーの探索を停止し、訪問者を最も近い囲んでいるif/thenまたはループブロックに戻す必要があります。
( XTCライブラリからの)Visitor
スーパークラスは次のように定義します
フォームのリフレクションメソッドを介してコールバックします
dispatch
例外をスローするように宣言されていないので、拡張するプライベートクラスを宣言しましたRuntimeException
これで、returnステートメントのvisitorメソッドは次のようになります。
そして、すべての複合ステートメントは、ReturnException
これはすべて正常に機能しますが、次の場合を除きます。
- 私はどこかで捕まえるのを忘れるかもしれ
ReturnException
ません、そしてコンパイラは私に警告しません。 - 汚れた感じがします。
これを行うためのより良い方法はありますか?この種の非ローカル制御フローを実装するために私が気付いていないJavaパターンはありますか?
[更新]この特定の例はやや無効であることが判明しました。Visitor
スーパークラスは例外(sでも)をキャッチしてラップRuntimeException
するため、例外のスローは実際には役に立ちません。enum
から型を返すという提案を実装しましたvisitReturnStatement
。幸いなことに、これは少数の場所(たとえばvisitCompoundStatement
)でチェックする必要があるだけなので、実際には例外をスローするよりも少し面倒ではありません。
一般的に、これはまだ有効な質問だと思います。おそらく、サードパーティのライブラリに縛られていない場合は、賢明な設計で問題全体を回避できます。
scheme - call/ccの詳細
これは、 call / ccとは何ですか?に関連しています。、しかし私は自分の目的のためにこの質問をハイジャックしたくありませんでした、そしてsetjmp/longjmpへのアナロジーのようなその議論のいくつかは私を回避します。
継続とは何かについては十分に理解していると思います。これは、現在の呼び出しスタックのスナップショットだと思います。なぜこれが面白いのか、継続で何ができるのかについては議論したくありません。私の質問は、より具体的には、なぜcall / ccに関数の引数を提供する必要があるのですか?なぜcall/ccは現在の継続を返さないので、私はそれで好きなことを何でもすることができます(それを保存し、それを呼び出し、あなたはそれに名前を付けます)?この他の質問(http://community.schemewiki.org/?call-with-current-continuation-for-C-programmers)からのリンクでは、「本質的に、それはあなたに継続を取得するためのクリーンな方法です。そして、保存されたポイントに戻る後続のジャンプの邪魔にならないようにしてください。」しかし、私はそれを取得していません。不必要に複雑に見えます。
go - Goでcall-ccを実行することは可能ですか?
Google の新しい Language GoでCall-with-current-continuationを実行することは可能ですか?
scheme - 陰陽パズルはどのように機能しますか?
私は、Scheme で call/cc のセマンティクスを把握しようとしています。ウィキペディアの継続に関するページには、例として陰陽パズルが示されています。
が出力されるはず@*@**@***@****@...
ですが、理由がわかりません。私はそれが出力されることを期待しています@*@*********
...
陰陽パズルがそのように機能する理由を誰かが詳しく説明できますか?
scheme - スキームでの継続 (call/cc)
今後の試験のためにスキームの継続を理解する必要がありますが、継続についてはまったくわかりません。誰かが継続学習の方法の情報源を教えてもらえますか?
よろしく、
ダーキー
lua - Luaのcall/cc - 可能ですか?
ウィキペディアの継続に関する記事には次のように書かれてい
ます。
それが真実であり、その方法を知る必要があるか、それとも真実ではなく、そのステートメントを修正する必要があります.
これが本当なら、Lua で call/cc を実装する方法を教えてください。方法がわかりません。ここで
説明されているように、Lua に coroutine.clone 関数があれば、call/cc を手動で実装できると思います。
クロージャーが call/cc を実装するのに十分でない場合、他に何が必要ですか?
以下のテキストはオプションの読み物です。
PS: Lua には、コルーチン テーブルによるワンショット継続があります。coroutine.clone 関数を使用すると、それを複製して複数回呼び出すことができるため、実質的に call/cc が可能になります (call/cc を誤解していない限り)。しかし、そのクローン機能は Lua には存在しません。Lua IRC チャンネルの誰かが、Pluto ライブラリ (シリアライゼーションを実装) を使用してコルーチンをマーシャリングし、コピーしてからアンマーシャリングし、再度使用することを提案しました。それはおそらくうまくいくでしょうが、call/cc の理論的な実装と、言語が手動で実装できるようにするために必要な機能の実際の最小セットは何かを見つけることにもっと興味があります。
編集 1: OK 人々、ここで私を助けてください。Scheme をまったく知らないので、これには長い時間がかかりましたが、私たちを助ける何かを思いつきました。以下のコードを見てください。1 つ目は Scheme のプログラムで、2 つ目は同じプログラムですが Lua で作成したものです。
うまくいけば、これが私たちを助けるでしょう。私たちは非常に近いと信じています。
PS: これらの例は、CallCC に関するウィキペディアの記事の最初の例から取られています。
スキームのバージョン
ルア版
私は Windows 用の DrScheme と Lua を使用しています。この 2 つは、簡単にダウンロードしてインストールできるツールで、これらを支援したいと考えている人なら誰でも使用できます。
functional-programming - この callcc の例はどのように機能しますか?
(callcc (fun k -> k 7)) + 3
(callcc (fun k -> 7)) + 3
これらはそれぞれ何を評価し、その理由は何ですか?