問題タブ [continuations]
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.
scheme - スキームでの継続 (call/cc)
今後の試験のためにスキームの継続を理解する必要がありますが、継続についてはまったくわかりません。誰かが継続学習の方法の情報源を教えてもらえますか?
よろしく、
ダーキー
scala - CPS/Continuations (末尾) 再帰関数の StackOverflowError
CPS 内で StackOverflow をスローしない末尾再帰関数を使用する方法はありますか?
次の StackOverflowError が発生します。
このエラーを回避する方法はありますか? トランポリン?例外をスローしてスタックを巻き戻す? ありがとう!
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 つは、簡単にダウンロードしてインストールできるツールで、これらを支援したいと考えている人なら誰でも使用できます。
scheme - dynamic-wind と call/cc のヘルプ
次のSchemeプログラムの動作を理解するのに苦労しています:
私が理解しているように、 c は "(display 'X)" の直前に作成された継続にバインドされます。
しかし、c を使用すると、それ自体が変更されるようです。上記の定義により、(予想どおり) IN、X、および OUT が出力されます。
そして、それは手順です:
今、私はそれが再び呼び出されたときに X が出力されることを期待していますが、そうではありません!
そして、c はもはや手続きではなく、c の 2 回目の呼び出しは機能しません!
(c) を呼び出すたびに、IN、X、および OUT を出力するという同じことが行われると予想していました。私は何が欠けていますか?
haskell - Haskell CPS プログラミング スタイルの問題
これは、CPS スタイルを使用してリスト内の要素を乗算する関数です。
式aux (0:xs) nk = k 0で'k' を 'nk'に変更するとどうなりますか? 2 つの違いは何ですか?
c# - Mono.Tasklets.Continuationを使用してクラッシュする
monoを使用してC#のマイクロスレッドメッセージパッシングライブラリで作業しようとしています。Mono 2.4かそこら以来、明らかに継続(yieldではない)が「Mono.Tasklets」の下で利用可能になっています。ただし、これらには私が見つけることができるドキュメントがなく、それらの一般的な使用法は機能しますが、デバッガーが接続しないときどき(ただし再現可能な)クラッシュが発生します。
私の具体的な質問は次のとおりです。
Mark()関数とは何か、いつどこで呼び出す必要があるかを知っている人はいますか?これは1回限りの初期化のようですが、なぜそれがコンストラクターに含まれないのかわかりません。
複数の継続を使用することに制限はありますか?継続を別のスレッドに渡すことができないことを発見しましたが、複数の継続を保存して前後に切り替えることができるようですか?
scala - "for" を使用した C# ライクな yield の Scala 実装
私は、次のような"for" 構文を使用して、C# のような yield return (つまり、これ) のさまざまな Scala 実装を使用しようとしています。
しかし、このコードはエラーでコンパイルされます:
私が理解しているように、 for 内のすべてのコードを() => Unit
ではなく の型にする必要があり() => Unit @with-annotations
ます。どうやってやるの?
この問題は非常に一般的なようですが、インターネットで言及されているものは見つかりませんでした。
c# - シリアル化と Yield ステートメント
yield
クラスをリハイドレートしたときに、生成されたイテレータの内部状態が保持されるように、ステートメントを含むメソッド (またはそのようなメソッドを含むクラス) をシリアル化することは可能ですか?
haskell - Haskell Contモナドはどのようにそしてなぜ機能するのですか?
これは、Contモナドが定義される方法です。
これがどのように、そしてなぜ機能するのか説明していただけますか?何してるの?
scala - 暗黙のモナドにScalaの区切られた継続を使用する
私は、モナディックインターフェイスによって定義されたある種のDSLで遊んでいます。
一連のflatMapアプリケーションを使用してモナドを適用するのはちょっと面倒で、構文的にはそれほど美しくないので、区切られた継続を使用してモナドコードと非モナドコードを暗黙的に混合しようとしています。
実際には正常に機能していますが、コンパイル可能にするために「Any」タイプに自分自身を制限する必要があるため、タイプには本当に満足していません:(。したがって、後で結果が得られたときに「Any」と「casting」を使用します。必要な場合、ランタイムエラーが発生する可能性があります。
これは、ScalaのOption-Monadを通常のコードと混合するためのコードの例です。これにより、私が話していることがわかります。
次のコマンドでコードをコンパイルします:$ scalac -P:continuations:enable BO.scala
そしてscalaREPLでテストします:
Option-Monadは、runOption関数を使用して実行されます(テスト関数を参照)。runOption内で呼び出される関数は、 get関数またはvalueメソッドを使用して、 Optionから値を取得できます。値がNoneの場合、モナドはすぐに停止し、Noneを返します。したがって、 Option型の値でパターンマッチングを行う必要はありません。
問題は、runOptionで「Any」タイプを使用し、 getで継続のタイプを使用する必要があることです。
runOptionを表現してscalaでrank-n型を取得することは可能ですか?だから私は書くことができます:
ありがとう!