次の 2 つの演算子 has と of を次のようなフレーズで実装します: peter has car of john 次のような質問に答えます: Who has What of X
has (誰が何を持っているかを指定する)とof (誰が何を所有しているかを指定する) の2 つの演算子を定義するこの単純なプログラムがあります。
これは、Prolog ソース ファイルに記述されたソリューションです。
:- op(100, xfy, of).
:- op(200, xfx, has).
peter has car of john.
peter has car of mary.
car of john of mary.
write_canonical()関数に関連する公式の SWI Prolog ドキュメントで読むことができるように: http://www.swi-prolog.org/pldoc/man?predicate=write_canonical%2F1
標準の括弧付きプレフィックス表記を使用して、現在の出力ストリームに Term を書き込みます (つまり、演算子の宣言を無視します)。引用符が必要なアトムは引用符で囲まれています。
したがって、write_canonical() 関数内で Prolog クエリを起動すると、次のようになります。
15 ?- write_canonical(peter has car of john).
has(peter,of(car,john))
true.
Prolog が自然言語形式をどのように解釈するかを知りましたが、正しいですか?
前のケースでは、文: (car of john)を最初に評価し、次に文: peter has (前の評価の結果) を評価することは非常に単純で明確に見えます。
次の解釈を持っています:ピーターは (ジョンの車) を持っています
わかりました、これは明らかです...今、私の質問に行きます。
私が行った場合:
16 ?- write_canonical(peter has car of john of mary).
has(peter,of(car,of(john,mary)))
true.
自然言語でどのように解釈できますか?(それが自然言語で意味がある場合)
初めに、II は最初に車が john と mary のブースに属していると解釈していました...そのため、前の例の 3 つの事実を紹介しようとしましたが、Prolog シェルで実行しようとした場合:
10 ?- peter has car of john of mary.
false.
これは間違っているようです。
自然言語の正しい解釈は?