expand_term, phrase(+ゴール,?リスト)
MINERVA superseeded IF/Prolog. Please see http://www.ifcomputer.co.jp/MINERVA for details.

We discontinued to sell IF/Prolog Dec 31. 2003. For current customers, we continue to provide professional support for IF/Prolog until Dec 31, 2008.

expand_term(+入力項,-出力項) phrase(+ゴール,?リスト) xxxx

expand_term/2は、IF/Prologがファイルのコンサルト/コンパイル時に文法規則を通常のPrologの節に変換するのに使用します。

IF/Prologaは標準Prologに準拠するように、ユーザパラメータの後に2つの内部リストパラメータをつけ加えます。

phrase/2は、文法規則によって生成されたPrologの節を呼び出す場合に使用します。この方が直接呼び出すよりも移植性があります。

?- expand_term((a --> r1; r2), T).

T = a(_163,_165) :- r1(_163,_165) ; r2(_163,_165)

yes ?- _

以下の例題を実行するには、まず次のテキストをコンサルトして下さい。

expr(Z) --> term(X), "+", expr(Y), {Z is X+Y}. expr(Z) --> term(X), "-", expr(Y), {Z is X-Y}. expr(Z) --> term(Z).

term(Z) --> signed_number(X), "*", term(Y), {Z is X*Y}. term(Z) --> signed_number(X), "/", term(Y), {Z is X/Y}. term(Z) --> "(", expr(Z), ")". term(Z) --> signed_number(Z).

signed_number(C) --> number(0,C). signed_number(C) --> "+", number(0,C). signed_number(C"-", number(0,X), {C is -X}.

number(0,C) --> digit(Y), {C1 is 0*10+Y}, number(C1,C). number(X,X) --> !.

digit(X) --> [C], {"0"=

?- phrase(expr(X),"12+3*(4+5)").

X = 39 yes ?- listing(digit). digit(X,[C|_261],_261) :- [48] =< C , C =< [57] , X is C - [48] . yes ?- _


Up read on...