サーチ…


何でも: `... // 0`

最も基本的なDCG非終端記号の1つは... //0 。これは「何でもありません」と読むことができます:

... --> [] | [_], ... .

これは、要素Eを含むリストLsを記述するのに使用できます。

phrase(( ..., [E], ... ), Ls)

DCGによる解析

DCGを解析に使用することができます。 同じ DCGを使用して、記述れているリストを解析して生成することができます。例えば:

sentence --> article, subject, verb, object.

article --> [the].

subject --> [woman] | [man].

verb --> [likes] | [enjoys].

object --> [apples] | [oranges].

クエリ例:

?- phrase(sentence, Ls).
Ls = [the, woman, likes, apples] ;
Ls = [the, woman, likes, oranges] ;
Ls = [the, woman, enjoys, apples] .

?- phrase(sentence, [the,man,likes,apples]).
true .

余分なゴール

余分な目標は、リストの要素が満たさなければならない条件など、DCG句に処理を追加することを可能にする。

余分な目標は、DCG節の終わりに中括弧の間に観察されます。

% DCG clause requiring an integer
int --> [X], {integer(X)}.

使用法:

?- phrase(int, [3]).
true.

?- phrase(int, [a]).
false.

余分な議論

追加の引数は、導出ツリーを装飾することによって、結果をDCG節の述語に追加する。たとえば、最後に値を計算する代数的文法を作成することができます。

演算の追加をサポートする文法が与えられた場合:

% Extra arguments are passed between parenthesis after the name of the DCG clauses.
exp(C) --> int(A), [+], exp(B), {plus(A, B, C)}.
exp(X) --> int(X).
int(X) --> [X], {integer(X)}.

この文法の結果は検証され、照会できます:

?- phrase(exp(X), [1,+,2,+,3]).
X = 6 ;


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow