まず、私はまた、「誰が」という質問をお願いしたいと思いますか?それはX
ですか、それともY
ですか?
これを明確にするために、各引数の意味を明確にする命名規則を使用することを強くお勧めします。たとえば:今すぐ
parent_child(X, Y).
、Prologのゴールあなたのデータの上にその理由を「非公式」の質問を翻訳する、例えば次のよう DCG考えてみます。ここでは
question(Query, Person) --> [who,is], question_(Query, Person).
question_(parent_child(Parent,Child), Parent) --> [the,parent,of,Child].
question_(parent_child(Parent,Child), Child) --> [the,child,of,Parent].
question_(married(Person0,Person), Person) --> [married,to,Person0].
question_(spouse(Person0,Person), Person) --> [the,spouse,of,Person0].
を、私はあなたを想定しています与えられた文をすでにのトークンに変換しました。これは、プロローグ アトムとして表しています。これは、することができます
:- set_prolog_flag(double_quotes, chars).
あなたが例えば書き込み:
?- Xs = "abc".
Xs = [a, b, c].
したがって、そのようなで動作するように非常に便利になり
便利DCGsで動作させるために、私は強く、次の宣言をお勧めしますプログラム。私は の練習としての文字をからのトークンに変換しておきます。
あなたは、このようなトークンを持っていたら、プロローグにリストなどのトークンのを関連付けるためにDCGを使用することができ、あなたの プログラム上を照会します。例えば
:
?- phrase(question(Query, Person), [who,is,the,parent,of,timmy]).
Query = parent_child(Person, timmy) .
もう一つの例:
?- phrase(question(Query, Person), [who,is,the,spouse,of,sarah]).
Query = spouse(sarah, Person).
は実際に実行このようなクエリは、単に目標として、それらを投稿します。たとえば、
これは、このような変換がPrologでは非常に簡単であることを示しています。
@GuyCoderは既にコメントに記載されているので、DCG 表記の詳細については、dcgをご覧ください。
このコメントの上の 'dcg'タグをクリックしてください。次に、右上に 'dcg'タグが再びあります。その右側に 'info'のリンクがあります。それをクリックしてください。情報ページには多くの良いリンクがあります。 –
ありがとう! aaaaaaaa – prolog