問題タブ [continuation]

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 に答える
513 参照

scheme - スキーム-継続を使用する

だから私はSchemeで継続が基本的にどのように機能するかを理解していると思いますが、再帰の代わりにそれを使用する方法を理解するのに苦労しています。

必要なすべてをすでに実行しているmake-matcher(基本的なパターンマッチングのみ)の作業コードが提供されます。パターンを指定すると、そのパターンのフラグメントを検索するために使用できるマッチャーが作成されます。マッチャーは、結果を提供するアクセプターを取得し、結果が受け入れられない場合は、フラグメントの次の部分に再帰的に下降して続行します。

さて、私たちがしなければならないのは、基本的に、アクセプターの代わりに継続を使用するように変更することです。接尾辞(一致しなかったパターンから残ったもの)と継続を返すので、次のようになります。

続行するために呼び出すことができる接尾辞と関数のバックトラックを提供します。

したがって、参考までに、元のコード

それでは、例としてor-matcherを使用してみましょう。現時点では、一致するものが見つかった場合は結果をアクセプターに渡し、アクセプターが結果を気に入らない場合は、次の可能な答えを探して続行します。継続を使用したい場合は、結果が見つかった後に強制的に終了し、call/ccを使用してプログラムの現在の状態を保存する必要があります。エスケープとcall/ccをどこに置くべきか正確にはわかりません。私の答えが正しいか間違っているかを教えてくれるアクセプターがいないので、今すぐベースケースを追加する必要があると思いますが...

誰かが私に行うべき主な変更についてのいくつかの指針を教えてくれれば、私はおそらくそれを理解できると思います。私はその時点で、WHATの個々の部分を理解していますが、それを実装する方法の全体像を正確に理解することはできません。

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

php - PHP のネストされたループ エコーは改行してはなりません

ここに私のコードセグメントがあります:

しかし、うまくいきません。ループ内の 2 つの echo ステートメントを続けて、新しい行に分割しないでください。どうすれば修正できますか?

0 投票する
4 に答える
2034 参照

c# - 継続チェーンで例外を伝播する適切な方法は何ですか?

継続チェーンで例外を伝播する適切な方法は何ですか?

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

f# - スタックオーバーフローを防ぐために、遅延は継続モナドでどのように機能しますか?

これは、これに対する参照の質問です: StackOverflow in continuation モナド
で、私が少し遊んだので、いくつかの説明が必要です。

1)私はこれを推測します:

これらの間のtoyvoによって示されたように、計算ワークフローの動作に違いを生じさせます。


(fun c -> map xs c)だから私はトリックが何であるかを正確に理解していません.(map xs)

2) 推論の問題。v- OP の 2 番目のマップの例では、 value の推論fの問題が原因でコンパイルされないことがわかりましa -> b lista -> b。なぜこのように推論するのでしょうか。let v = f xそれがうまく推論できる場合。

3) VS がツールチップに不正確な型シグネチャを表示しているように思えます: モナドの Return の戻り値の型は: です('e->'f)->fが、Bind の戻り値の型は のみ'c->'bです。-バインドの場合('e->'f)のみに単純化されているようですが、ここで何か不足していますか?c

明確にしてくれてありがとう、
トーマス

編集 - テストダンプ:

map_fixed:
マップ [1; 2] マップ [2] マップ [] cBind [] マップ [] cBind [3] マップ [2] マップ [] cBind [] マップ [] [2; 3]

マップ:
マップ [1; 2] マップ [2] マップ [] cBind [] cBind [3] [2; 3]

質問2に編集:

0 投票する
4 に答える
334 参照

haskell - IO を MonadCont のインスタンスにするのは理にかなっていますか?

明らかにMonadConts はより制限されておりMonad、そのおかげでプレーンな sよりも強力callCCです。これは、そのインスタンスが少なくなり、より多くのことができることを意味します。

の定義されたインスタンスを見るとMonadCont、そこにリストされているすべてのものが 、または既存のインスタンスのいずれContかを必要とするように見えます。つまり、いくつかの or から開始する必要があり、特に に変えることはできません。ContTMonadContContContTIOMonadCont

ただし、コンテキストで使用するのは理にかなっていると思うので、以下を簡略化できます (公式の Hackage ページのcallCC例から調整):IO callCC

の中へ

callCCよりクリーンな方法で do ブロックで使用します。

当然のことながら、IOのインスタンスを作成するにMonadContは何らかの魔法が必要です。なぜなら、callCCforIOは「未来の計算で指定された関数を呼び出して、現実の世界で次に何が起こるかを指定する」ため、実際にこれが何を意味するかを知ることができるのはインタープリターまたはコンパイラーだけです。 . 一方、これがインポート可能であるという理論的な理由はわかりませんでした。これは、Scheme が既に長い間それを持っており、そのようなインスタンスを作成するために言語を変更する必要がまったくないためです。

考えられる問題

私が考えることができる 1 つの要因は、 is のセマンティクスがcallCC適切なクリーンアップの保証と競合することです。多くの言語は、適切なクリーンアップのために「try...finally」制御を提供しており、C++ のデストラクタもそれを保証しています。Haskell でそれが何であるかはわかりませんが、callCC利用できる場合はIO、それを使用して、クリーンアップが必要な関連するコンテキストから逃れることができます。そのため、Ruby で何が起こるかIOを確認できるように、sush 保証を提供することは不可能になります。

意見の議論

@jozefg からの回答は非常に優れています。ここに私の意見を書き留めておきたいと思います。

  1. MonadContmtlから来ているのは本当です。しかし、それは、正しい定義がコンパイルモジュールのスコープ内にあり、設定されているunsafeCallCC場合、GHCまたは他のコンパイラがインスタンスを定義および定義できないという意味ではありません。MonadCont-XIOMonadCont

  2. 例外の安全性については既に説明しましたが、それについて確信を持つのは難しいようです。しかし、私の意見では、Haskell には既に がありunsafePerformIO、これは基本的に よりも安全ではありません。unsafeCallCC

  3. callCCほとんどの場合、原因は強力すぎるため、可能な限り避ける必要があります。ただし、私の意見では、継続渡しスタイルを使用して遅延評価を明示的にすることができます。これにより、プログラムをよりよく理解し、最適化の可能性を見つけやすくなります。もちろんCPS は ではありませんMonadContが、それを使用して深くネストされた内部関数を do 表記に変換するのは自然なステップです。

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

java - Jetty、DefaultServlet、BlockingCallback、および TimeoutException の問題

Jetty 9.1.0.RC1 (スタンドアロン ディストリビューション) を搭載したオンライン アプリケーションを実行しています。

静的コンテンツ (.js、.css、.png ファイルなど) を提供するときにランダムに発生する次の問題によって、ログ ファイルがいっぱいになります。

次のようなリソースにも同じことが当てはまります。

サーブレット 3.0 を使用しています。2 つの DefaultServlet のインスタンスがあります。1 つは webdefault.xml からのもので、もう 1 つは web.xml からのもので、ユーザー イメージ (.war ファイルにはバンドルされていません) を提供します。

前者の DefaultServlet の構成は変更されません。後者は次のようになります。

私はこのことを理解しようとして過去 3 日間を費やしましたが、まだ立ち往生しています。アプリケーションのどこでも継続を明示的に使用していません。

この問題は、桟橋が (再) 起動されてから数日後にのみ発生します。

答えを探す手がかりはありますか?考えられるすべてのオプションを使い果たしたようです。

敬具、

マイケル・ジスコフスキー