0

次の 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.

これは間違っているようです。

自然言語の正しい解釈は?

4

1 に答える 1

1

これに関するあなたの以前の質問とCapelliCの回答を読みながら、私はダブルテイクをしました。実際に読んでみるべきですが、

「ピーターはジョンの車を持っており、その車は[ジョン] がマリーのものです。」

あなたの解釈は(を使用してwrite_canonical)次のようなものである必要があります。

has(peter, of(car, [john,marry]))

または多分

has(peter, of(car, john)), has(peter, of(car, marry))

それをどのように実装したいかによって異なりますが、実際に同じ車である場合 (これはあなたの例から完全には明らかではありません)。

「Peter has car of John of Mary」は、もちろん従来の英語ではありません。

于 2013-03-29T18:01:15.433 に答える