問題タブ [prolog-coroutining]

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 投票する
3 に答える
1356 参照

prolog - プロローグのガード条項?

それらは存在しますか?それらはどのように実装されていますか?

SWI-Prolog(、など)のcoroutining述語には、ガード機能あります。それらは、好ましいPrologプログラミングスタイルにどのように適合しますか?freezewhendif

私は論理プログラミング(Prologとまったく)に非常に慣れておらず、それが純粋に宣言型ではなく、非常に単純な場合でも手続き上の考慮が必要であるという事実に多少混乱しています(またはの使用に関するこの質問を\==dif参照してください)。重要なものが欠けていますか?

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

prolog - プロローグでゴールを凍結

リストなどの変数が無制限になるまで目標を凍結したいのですが、今は

しかし、いくつかの操作の後に停止し、永遠に待機します。誰かがこれを修正する方法を教えてもらえますか?

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

prolog - 到達不能になった変数をブロックするfreeze/2ゴール

次のような小さなプログラムを作成して、到達不能になったときに目標に使用されたメモリfreeze(X,Goal)が回収されるかどうかを判断しました。X

次のクエリを実行しましょう...

...さまざまなPrologプロセッサを使用して、メモリ消費を調べます。 なんという違いでしょう!

でさらに反復を実行すると?- length(Zs,1000), big_freeze_test(1,10000,Zs).、次のような観察結果が得られました。

  • Ciao Prolog は{ERROR: Memory allocation failed [in Realloc()]}中止する前に報告します。

  • は、マシンがフリーズするまで割り当てを増やします。

  • は、すべての反復を3.554秒で実行します。
  • もすべての反復を実行しますが、36.910秒かかります。

SWI-Prolog と YAProlog では機能するが、他のものでは機能しない理由はありますか?

実行時間を考えると、SWI-Prolog が YAProlog よりも 1 桁以上優れているのはなぜですか?

私の直感は、「属性変数」と「ガベージ コレクション」の相互作用に傾いています。SWI-Prolog と YAProlog は、他の Prolog プロセッサとは異なる属性付き変数 API と実装を (共有?) 持っています。ありがとうございました!

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

prolog - Prolog コルーチン (freeze/2、when/2) と DCG の混合について

最近の質問「プロローグ二分探索木テスト - 不要な親の親ノード比較」に対する以前の回答で、を使用するミキシングを提案しました...lazy_chain/2

... in_order//1と一緒に...

... そのようです:

その範囲が で記述されたシーケンスの一部に限定されるように「プッシュ」する簡単な方法はありlazy_chainますか?phrase/3in_order//1

今、私は...

...これは(もちろん)さらにインスタンス化すると失敗する可能性がありますZs

それを回避し、 lazy_chainの一部に制限するにはどうすればよいですか?

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

concurrency - Prolog 遅延評価: LIFO または FIFO ウェイクアップ?

多くの Prolog システムにはfreeze/2述語があります。この述語は、geler/2Prolog-II よりも前に発明されたので、おそらくその名前を持つべきです。

同じ変数に条件があると仮定しますが、2 つの異なる目標があります。

G1 が最初に実行されるか、G2 が最初に実行されますか? G1 と G2 が新しいフリーズを生成し、それも起こされたらどうなるでしょうか。

G3 または G4 は常に G1 と G2 の間で実行されますか? それとも、G3 または G4 は G1 と G2 の後、または後で実行される可能性がありますか?

さよなら

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

prolog - ラムダ式を適用する逆、Prolog での eta+alfa 変換?

コルーティングには興味深い問題がいくつかあります。たとえば、未到達の凍結された目標を取り戻したいとします。しかし、巡回項をサポートしない Prolog システムには問題があります。すなわちフリーズ:

内部データ構造のループにつながります。簡単な回避策は、凍結された目標をカリー化することです。したがって、 predicate を使用する代わりに、次のように定義できるfreeze/2predicateを使用します。guard/2

しかし、どのように定義できますfreeze/2guard/2? 新しい変数を導入しないため、明らかな定義は機能しません。また、クロージャに V が含まれているという問題がまだ残っています ((\)/2がラムダ抽象化であるラムダ ライブラリを想定)。

さよなら

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

prolog - リストの先頭の s(s(0)) を削除します

(これはその質問へのフォローアップです)。

どちらが正しいかの書き方lead1(Xs,Ys)は、 iffは先頭の用語をすべて削除しYsた接尾辞です。したがって、先頭の s を削除する代わりに、この質問は先頭の s の削除に関するものになりました。Xss(s(0))0s(s(0))

元の質問と比較して、難しさはここで and のケースを適切に処理することにs(X)ありs(s(X))ます。