問題タブ [prolog-defaulty]
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 - Prolog - 命題論理の式
特定の入力が数式を表しているかどうかを検証するために、述語を作成しようとしています。
p、q、r、s、t などの命題アトムにのみ使用することが許可されています。テストする式は次のとおりです。
wff
与えられた構造が式の場合に true を返し、それ以外の場合に false を返す述語を作成しました。また、数式内で変数を使用する必要はありません。以下で説明するように、命題アトムのみを使用します。
このようなテストを導入する
wff(and(q, imp(or(p, q), neg(p)))).
と、呼び出しは と の両方の値を返しtrue
ますfalse
。なぜこのようなことが起こるのか教えてください。
prolog - プロローグ: "check(a++b++c++d equals d++a++c++b) -> yes" の実行方法
カスタム オペレータを定義しましょう++
。equals
そして事実:
check/1
次のすべての状況で true を返す述語、 let it be を作成しようとしています。
戻る
これをPrologで実装する方法は? (コードスニペットをお願いします。それは可能ですか?何か不足していますか?)
Gnu-Prolog が推奨されますが、SWI-Prolog も使用できます。
PSコードはドラフトの「疑似コード」として扱い、小さな構文の問題は気にしないでください。
PPS '++' はまだ始まったばかりです。オペレーターをもっと増やしてほしい。そういうわけで、ものをリストに入れることは良い解決策ではないのではないかと心配しています.
さらに
さらに、クエリが可能であればいいでしょう(ただし、この部分は必須ではありません。最初の部分に答えることができれば、それで十分です)
可能な結果の1つ(他の人を見せてくれた@matに感謝)
私は主に質問の最初の部分の解決策を探しています-「はい/いいえ」チェック。
X、Y の 2 番目の部分は、いい追加です。その中で、X、Y は単純なアトムでなければなりません。上記の例では、X、Y のドメインが指定されていますdomain(X,[a,b,c]),domain(Y,[a,b,c])
。
macros - 用語リストの用語拡張
すべてが同じパターンに従ういくつかのルールが必要だとします。可能なすべての最初の引数を明示的にリストすることにより、非決定論的な動作を回避したいときに、この状況に遭遇しました。ただし、いくつかの可能性についてはまったく同じことを行う必要があることはわかっています。これに対処する 1 つの方法は、末尾にキャッチオール句を含めることです。
しかし、これはあまり良いことではありません。なぜなら、予期しない入力があったのか、それとも自分のプログラムで間違いを犯したのかを実際に知ることができないからです。これを避けるために、私は言うこともできます
しかし、繰り返しになりますが、私は現在、Prolog の決定論的な動作と、議論が根拠のあるインデックス作成と戦っています。
したがって、代わりに、次のようなことを行います。
問題は、このような既存のコードを見つけようとしたのですが、できませんでした。私が何か間違ったことをしているからですか?この問題にアプローチするより良い方法はありますか? それとも完全に回避しますか?
「あなたは間違った問題を解決している」という答えは気にしません。
編集: いくつかのグーグルは、実際に SWI-Prolog ドキュメントからこの非常によく似た例に私を連れて行きました:
http://www.swi-prolog.org/pldoc/man?section=ext-dquotes-motivation (一番下)
prolog - Prolog でのツリー リーフ トラバーサル
プロローグ演習のトレーニング中にいくつかの問題が発生しました。以下の問題は、
述語は、ツリーであるとはどういう意味かを定義し、用語がツリーであるかどうかをテストするために使用できます。
この述語を使用すると、ツリー内の要素 (リーフと呼ばれます) を見つけることができます。
したがって、ここには 2 つの問題があります。1 つ目はelements/2
、最初の引数のツリーの葉で見つかった要素のリストを左から右の順序で生成する書き込み述語です。
content/2
2 つ目は、2 つのツリーに同じ要素が同じ順序で含まれている場合に正確に成功する述語 same を記述します。重複は重要です。
プロローグが得意な人なら誰でも助けてくれるといいのですが、どうもありがとう。
prolog - PROLOG のディープ リバース - リスト
PROLOG の入れ子になったリストでディープ リバースを生成するための述語を作成しようとしています。
現在、私はこの述語を取得しました
結果は次のようになります。
問題は、内側の List が反転されていないことです。次のようになります。
助けてくれてありがとう。