2011-06-30 8 views

答えて

5

DCGは、リストと非終端記号の関係を記述する。しかし、これらの議論は単なる用語です。機能を表現するのに使用できますが、機能を直接表現することはできません。違いを確認するには、各ノードにフィーチャーの数値を関連付けるとします。 DCGでは、その機能をどのように表現するかをケースバイケースで決定する必要があります。 1つのノードではfeature(X, singular)であり、別のノードでは異なるように見えます。または、すべてのフィーチャをリストで一様に表現することにします([nodename=idx,..., numerus=singular,...])。

+0

何でリストとして均一に表す化合物の代わりに(?)用語としての長所/短所? – dnolen

+2

これはより均一です。したがって、特徴を抽出する方がはるかに簡単です。フィーチャーをいくつかの複合語の引数に入れると、複合語の種類ごとにアクセスコードを記述する必要があります。 – false

4

これは完全に有効で、非常に便利です。たとえば、古典的な(今は無料です)ブックPNLAから、変項をキャプチャする2つの引数と、推移的動詞の「意味」(論理形式LF):

tv(nonfinite,  LF) --> [TV], {tv(TV, _, _, _, _, LF)}. 
tv(finite,   LF) --> [TV], {tv(_, TV, _, _, _, LF)}. 
tv(finite,   LF) --> [TV], {tv(_, _, TV, _, _, LF)}. 
tv(past_participle, LF) --> [TV], {tv(_, _, _, TV, _, LF)}. 
tv(pres_participle, LF) --> [TV], {tv(_, _, _, _, TV, LF)}. 

動詞はその後

tv(write, writes, wrote,  written, writing, X^Y^ `writes(X,Y) ). 

See full example.)として定義することができ

+0

事実(例: 'tv/6')がすべての引数でインデックスされていない限り、単語形式による検索(例: 'written')は遅くなることを指摘してください。より速い辞書表現は 'tv(written、past_participle、X^Y^writes(X、Y))'となります。 – Kaarel

+0

@Kaarel:良い点、私はインデックスについて考えなかった。 –

関連する問題