1

Ivan Bratko のProgramming for Artificial Intelligenceを使用して、Prolog でDCG 文法解析ツリーを勉強しています。DCG 文法を使用して文の意味を推定するプログラムでは、次の 2 つの述語を見つけて、一種の意味知識を表していると思います。

properName(john) --> [john].
properName(mary) --> [mary].

これらの述語をどのように読むべきですか? 文字列「ジョン」で表されるリストの要素が固有名であり、この固有名がジョンであることは事実です (メアリーも同じです)。

私の読みは正しいですか、それとも他の意味がありますか?

4

2 に答える 2

2

これは、それが使用されている文脈以外では解釈に役立たない些細な述語です。

つまり、右側で使用する DCG ルールによって、固有名が特定の方法で使用されることを要求するためにのみ使用できます。あなたがそれを示した方法は、単独では、次のことを意味します。

「ジョン」は固有名詞で、「メアリー」も固有名詞です。

編集

私はここで間違っているかもしれませんが、あなたは依然として英語を悪用して、正式な言語を使用して説明するのが最も適切なことを説明しています. Prolog は、構文とセマンティクスが定義された正式な言語です。論理関係や計算を正式に記述するために使用できます。それを忠実に英語に翻訳しようとするのは、不器用で不必要なことに違いありません。あなたの質問の述語と同じくらい些細なことは、ばかげて、理解しにくく、扱いにくいものに変わります。

PS あなたがとても好きな言葉の正しいスペルは表現です。 http://machaut.uchicago.edu/?resource=Webster%27s&word=representation&use1913=on

于 2013-05-17T14:38:07.877 に答える
2

properName(X)は単なる単項規則です (DCG のコンテキストでは、これは Prolog の 3 項述語です - で確認してください?- listing(properName))。あなたはそれを「靴下」または「ジャム」と呼ぶことができたでしょう、それは完全にあなた次第です. したがって、適切な名前「john」または「mary」を表す意味に関する知識は、コードのどこにもありません (自己文書化機能として命名を使用しますが、文書化はコードではありません)。

述語は、アトムjohnまたはmary入力ストリームに存在することを許可し、それ以外は何も許可しません。Xそして、その原子と一体化することを要求します。

次のように定義できます。

name(X) --> [X], { member(X, [john, mary]) }.

それから、

4 ?- phrase( name(X), [john,jack], Z).
X = john,
Z = [jack] ;
false.

5 ?- phrase( name(X), [jack,john], Z).
false.

8 ?- phrase( name(X), [john,mary], Z).
X = john,
Z = [mary] ;
false.

9 ?- phrase( name(X), [mary,john,jack], Z).
X = mary,
Z = [john, jack].

11 ?- phrase( name(jack), [jack,mary,john], Z).
false.
于 2013-05-17T17:09:43.420 に答える