、Prologであなたは機能をキャプチャ:複数の機能をプロローグDCG?そのように解析している間に私が理解から
foo(feature(X)) --> [X], bar.
は、この共通の設計DCGsですか?
foo(featureA(X), featureB(Y)) --> [X], [Y], bar.
、Prologであなたは機能をキャプチャ:複数の機能をプロローグDCG?そのように解析している間に私が理解から
foo(feature(X)) --> [X], bar.
は、この共通の設計DCGsですか?
foo(featureA(X), featureB(Y)) --> [X], [Y], bar.
DCGは、リストと非終端記号の関係を記述する。しかし、これらの議論は単なる用語です。機能を表現するのに使用できますが、機能を直接表現することはできません。違いを確認するには、各ノードにフィーチャーの数値を関連付けるとします。 DCGでは、その機能をどのように表現するかをケースバイケースで決定する必要があります。 1つのノードではfeature(X, singular)
であり、別のノードでは異なるように見えます。または、すべてのフィーチャをリストで一様に表現することにします([nodename=idx,..., numerus=singular,...]
)。
これは完全に有効で、非常に便利です。たとえば、古典的な(今は無料です)ブック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.)として定義することができ
事実(例: 'tv/6')がすべての引数でインデックスされていない限り、単語形式による検索(例: 'written')は遅くなることを指摘してください。より速い辞書表現は 'tv(written、past_participle、X^Y^writes(X、Y))'となります。 – Kaarel
@Kaarel:良い点、私はインデックスについて考えなかった。 –
何でリストとして均一に表す化合物の代わりに(?)用語としての長所/短所? – dnolen
これはより均一です。したがって、特徴を抽出する方がはるかに簡単です。フィーチャーをいくつかの複合語の引数に入れると、複合語の種類ごとにアクセスコードを記述する必要があります。 – false