問題タブ [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.

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

functional-programming - ラケットのシフト/リセットを理解する

foldrラケットでの 2 つの素朴な実装を提示します。

この最初のものは適切な末尾呼び出しがなく、大きな値の場合に問題がありますxs

この 2 番目のものは、継続を伴う補助関数を使用して適切なテール コールを実現し、大きな値で安全に使用できるようにします。xs

見てみるracket/controlとラケットは一流の継続に対応していることが分かります。andをfoldr使用して 2 番目の実装を表現することが可能/有益であるかどうか疑問に思っていました。しばらくいじっていたら、脳が裏返しになってしまいました。shiftreset

答えがあれば十分な説明を提供してください。私はここで大局的な理解を求めています。

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

haskell - MaybeとEither以外に興味深いシングルショットモナドはありますか?

Monteプログラミング言語とその祖先のEには、「エジェクター」と呼ばれるシングルショットで区切られた継続の構文があります。これは、構文境界内で一度だけ使用できる継続です。たとえば、呼び出されないイジェクターは次のとおりです。

そして、次の名前のイジェクター:

どちらも に評価され42ます。イジェクターが呼び出されるケースにアクションを追加することもできます。

それがこの構文のすべてです。これがどのようにMaybeまたはを模倣するかを想像するのは難しくありませんEitherHaskell Wiki on Maybeの例を慣用的なモンテに書き写します。

( を渡す負担をどのように負担しなければならないかに注意してくださいej。Monte には、do 表記の「プログラム可能なセミコロン」がありません。)

しませんがEither、ほとんど同じです。句を追加する機能catchにより、必要なタイプの識別が提供されます。区切られた継続は構成することがよく知られているため、複雑なツールを構築することが可能です:

これらの種類のガジェットは、Monte で手書きのパーサー コンビネーターなどを構築するために使用されます。したがって、すべてのモナドの母で、ダン・ピポニはCont、ある意味で、Monad他の多くのモナドをMonad構築できる非常に原始的なものであると説明しています。モンテでもこれを試みることができます。オブジェクトベースの言語でモナドをエンコードするために Moggi のスタイルを使用しましょう。

そして、バインディング ヘルパーiをエンコードして、それがどのように見えるかを理解しましょう。

...これは役に立ちません。これは良い構文のようには見えません。

未来にはクールなロボットが登場するはずだったが、これはそうではなかった。ただし、別の問題があります。Monad別の伝統的な, をエンコードしましょうList:

そして、伝統的なデカルト積をやってみましょう。まず、直接計算してみましょう。継続を渡す代わりに、リストモナドを使って直接バインドします:

そして今、エジェクタを使用して:

そう!それはかなり興味深いです。完全なリストモナド計算が実行されていますが、イジェクタはリストの最初の項目しか認識しません。エジェクターは構成可能であるため、多くの中間結果を計算しないというより良い仕事をする、より洗練された論理モナドを構築する方法があると思います。

私の質問は次のとおりです。慣用的なモンテに変換するMaybeEither、エジェクタ構文がエレガントに適用されることがはっきりとわかります。このような興味深い単発動作を持つモナドが他にあるでしょうか? Haskell に限定されていると感じないでください。Monte は型付けされていないので、型付けが難しいモナドを理由にあなたを敬遠する人はいません!

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

kotlin - Kotlin での継続はまだ使用可能ですか? 利用可能な例はありますか?

Kotlin には continuations 用のパッケージがありますが、実験的とマークされています。API 以外のドキュメントはなく、チュートリアルや例もどこにもありません。すでに使用可能かどうか知っている人はいますか?その使用例は何ですか?