問題タブ [delimited-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.
scala - Scala 継続とは何ですか? なぜそれを使用するのですか?
Programming in Scalaを終えたばかりで、Scala 2.7 と 2.8 の間の変更点を調べています。最も重要と思われるのは継続プラグインですが、それが何に役立つのか、どのように機能するのかわかりません。非同期 I/O に適していることがわかりましたが、その理由はわかりませんでした。このテーマに関するより人気のあるリソースのいくつかは次のとおりです。
そして、スタックオーバーフローに関するこの質問:
残念ながら、これらの参考文献はいずれも、継続の目的やシフト/リセット関数の役割を定義しようとはしていません。リンクされた記事の例がどのように機能するか (またはそれらが何をするか) を推測することはできませんでした。3番目の記事のこの単純なものでさえ:
なぜ結果は 8 なのですか? それはおそらく私が始めるのに役立つでしょう。
scala - ネストされた CPS「リセット」
Scala 2.8 の CPS コンパイラ プラグインを使用すると、2 つの魔法のコントロールreset
とshift
. リセットは継続を区切り、シフトは継続をキャプチャします。
ネストされたリセットを一種の「フォーク」として使用して、NIO で CPS を使用する例があります...? リセットを入れ子にする目的がよくわかりません。どのような影響がありますか?
scala - 区切られた継続プリミティブが「シフト」および「リセット」と名付けられたのはなぜですか?
私は(一般的に)何shift
をreset
意味するかを理解していると思います。しかし、なぜ彼らがそのように名付けられたのか分かりませんか? 区切り継続プリミティブは、英語の「シフト」および「リセット」単語と何の関係がshift
ありますか?reset
scala - シフトがリセット ブロックのどこにあるかは重要ですか?
reset
単一のブロックがあるとしますshift
:
shift
「do smth. 2」または「do smth. 3」の後に、結果を変更せずに配置するのは正しいr
ですか? ブロック のどこにshift
立っているかは問題ではないというのは正しいですか。reset
haskell - Haskell で Web 開発を行うために区切られた継続を使用している人はいますか?
Haskell 開発、特に Web 開発に区切られた継続を使用している人はいますか? このトピックは魅力的だと思います。これまで勉強してきたものよりも、もっとアクセスしやすいものが必要です。
これまでに見つけたリソースは次のとおりです。
- シフト・トゥ・コントロール
- 区切り継続に関する Haskell Wiki ページ
- 区切られた継続のためのモナディックフレームワーク
- Oleg のページの Delimited Continuations トピック
ありがとう!
-ディーチ
scala - Scala:区切られた継続の説明-ではない
継続の概念に興味を持って、私はwikiや投稿を読み始め、この「単純な」例にたどり着きました。
Scalaの知識がなければ、私はここで完全に迷子になり、8がどのように出てくるのか理解できませんでした。
以下は、私が意味を理解しようとしたが失敗した方法です。誰か簡単な説明をお願いします。ええ、Scalaの文法書はありますが、それらは厚すぎます。私は、Scalaのマスター言語よりも、区切られた継続の概念を理解することに興味があります...
(Int=>Int)
C#デリゲートのように見えます。入力はInt、出力はIntです。
k: (Int=>Int) => k(7)
私はここで迷子になっています...kとは何ですか、そして(Int => Int)=> k(7)とは何ですか?
shift { k: (Int=>Int) => k(7) } + 1
さらに失われた...
reset { ...; shift { k: (Int=>Int) => k(7) } + 1 }
さらにますます失われます...
functional-programming - マルチプロンプトで区切られた継続のAPIを理解する
マルチプロンプトで区切られた継続のためのAPIは、OCamlのDelimited Control、Abstractly and ConcretelySystemDescriptionの論文で説明されています。
私の質問はのタイプに関するものですpush_subcont : ('a,'b) subcont -> (unit -> 'a) -> 'b
。なぜこのタイプではないの('a,'b) subcont -> 'a -> 'b
ですか?さらに、なぜsubcontsに別のタイプがあるのですか?なぜ単純ではないのです('a,'b) subcont = 'a -> 'b
か?オレグは物事を可能な限りエレガントにするので(しかしよりエレガントではない)、それには正当な理由があるとほぼ確信しています。
ありがとう!
functional-programming - シフト/リセットをdelimccに変換するには?
私は Oleg と Asai の「for dummies」論文 (http://pllab.is.ocha.ac.jp/~asai/cw2011tutorial/main-e.pdf) を研究していますが、この論文では代わりにシフト/リセット形式を使用しています。 Oleg の delimcc で利用可能なプロンプトのものの。だから私はいくつかの質問があります:
そもそもプロンプトとは?shift
そして、なぜ他の機能に受け継がれるのでしょうか。subcont とは何かを知っていればよいのですが、この記事を読み進めたいだけなので、スキップしてもかまいません。shift
また、とと の違いは何ですか。論文ではshift0
どのように対応していますか。shift
また、reset
delimccには何がありますか? 私の直感はそれを私に伝えておりnew_prompt
、push_prompt
どういうわけか に対応していreset
ます。しかし、ここでも説明が必要です。
編集: 論文の簡単な例を翻訳することができ、私の直感は正しいことがわかりました。ただし、違いの本当の説明と、delimcc がそうである理由を知りたいです。誰かが興味を持っている場合に備えて、ここに両方のバージョンがあります
紙:
デリムク:
scala - List.mapを区切られた継続で機能させるには、どのタイプのパラメーターを使用する必要がありますか?
私は基本的に、ScalaAPIページで区切られた継続の例に従っています。以下のコードは正常に機能します。
ただし、次のように変更するgo
と、次のようになります。
このエラーが発生します:
2番目のタイプのパラメーターとして追加Any
しても役に立ちません。どのタイプを提供する必要があるかについて何か考えはありますか?