問題タブ [logical-purity]
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.
prolog - memberchk/2 の宣言的使用
memberchk/2
member/2
は、次のように定義される一般的に定義された述語です。
したがって、 の最初の回答に対してのみ成功しmember/2
ます。その完全な手続き上の意味は、純粋な関係には当てはまりません。その非リレーショナル動作の例として、
一方、多くの場合、十分にインスタンス化さmemberchk/2
れた引数で呼び出され、純粋な関係の効率的な近似と見なすことができます。
背後にあるそのような純粋な関係の 1 つがmemberd/2
(を使用してif_/3
) です。
memberchk/2
十分にインスタンス化されたケースで近似できる他の純粋な関係はありますか?
言い換えればmemberd/2
、 の完全な宣言的置換はありますか、または に置換できないmemberchk/2
正当なケースがまだありますか?memberchk/2
memberd/2
prolog - Prolog ルールのゴール (ステートメント) の順序
私は最近 Prolog を勉強し始め、1 つの奇妙な問題に直面しました。ここでは、関係のツリーと 2 つのタスクのソリューションを提供するコード例 (私はSWI-Prolog 7.2.3を使用しています)を見ることができます。
dave の親戚を取得したいときは、次のようにします。
次に、相対次の方法の定義を変更します。
最後のステートメントの目標の順序を変更するだけです。そして今、私は次の出力を持っています:
出力に dave が表示されます。どうしてそうなった?私は X \== Y と書きました... 誰かこれについて良い説明をしてくれませんか?
そしてもう1つ質問です。プログラムで同じ答えを書かないようにするにはどうすればよいですか?
ありがとうございました!
prolog - プロローグ: 障害スライスの冗長なプログラム ポイント?
私たちは、障害スライスの概念に基づいて、純粋で単調な Prolog プログラムにおける予期しない普遍的な非終了を説明するための診断ツールを実装しています。
論文「障害スライスを使用した非終了ロジック プログラムの理由のローカライズと説明false/0
」で紹介されているように、説明候補のプログラム フラグメント サイズを縮小するために (非終了を維持しながら)、いくつかのプログラム ポイントに目標が追加されます。
これまでのところ、とても良いです...だからここに私の質問があります1:
N 個の目標を持つ条項に N+1 個のプログラム ポイントがあるのはなぜですか?
または、より正確には:
なぜ N ポイントでは足りないのでしょうか? (N+1) 番目のプログラム ポイントが必要になることはありますか?
false
代わりに、懸念の述語の各使用にそれを移すことはできませんか?また、プログラムフラグメントは次のようなクエリにのみ使用されることがわかっています
?- G, false.
脚注 1:foo(bar,baz).
各事実は規則とみなされると仮定します。foo(bar,baz) :- true.
prolog - Pure Prolog の目標の順序
私はプロローグが初めてです。私の知る限り、Pure Prolog は Horn 句に制限されています。これは非常に単純なプロローグプログラムです -
私の大学のスライドには、Pure Prolog のルールでゴールの順序を逆にしても、結果の順序は変更されるべきではないと書かれています。上記のコードには、実装した 2 つのルールがあります。目標の順序を変更しただけですmusttake
。musttakereverse
したがって、スライドによると、結果の順序は実行時に変更されるべきではありません。しかし、コードを実行すると、異なる順序で結果が得られます (私の理解によると、上記のプログラムは にありpure prolog
ます)。
だから、それが本当かどうか知りたい
ゴールでの順序の変更は、純粋な Prolog コードでの結果の順序を変更しません。
ありがとう!
if-statement - 非宣言的な if-then-else 構文を使用しない Prolog での適切なフロー制御
私は恣意的な事実をチェックし、それがナレッジベースにある場合は何かを行い、そうでない場合は別のことをしたいと思いますが、( I -> T ; E)
構文はありません。
私のナレッジベースにはいくつかの事実があります:
不完全なルールが与えられた
このようにせずに、これを処理する正しい方法は何ですか?
list - 連続した重複を排除する
リスト要素の連続した重複を排除します。
これに対する私の解決策は次のとおりです。
そして、私は初心者であり、論理パラダイムの経験がないため、改善できる点と、なぜ私の解決策がうまくいかないのかを教えてください.
たとえば、X \= Y
私にはきれいに見えません。