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
?- _
|