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.
call(+ゴール)
call(+ゴール名,+引数リスト)
execute(+ゴール)
execute(+ゴール名,+引数リスト)
「ゴ−ル」は、ゴ−ルとして解釈することのできる項でなければなりません。
call/1は、「ゴ−ル」を証明、あるいは満たそうとする試みが成功した場合に成功します。call(ゴ−ル)を呼び出す代わりに、ゴ−ルとして引数「ゴ−ル」自身を書いてもかまいません。つまり、call/1の実体は「ゴ−ル」によってそのまま置き換えられます。call/1は透明だということです。「ゴ−ル」におけるカットは、call/1のレベルに影響を与えます。
execute/1は、サブゴ−ルとして「ゴ−ル」を証明、あるいは満たそうとする試みが成功した場合に成功します。この点はcall/1と違うことに注意して下さい。つまり、「ゴ−ル」におけるカットはサブゴ−ルとして実行され、execute/1のレベルでの選択点に影響を与えません。not/1は、execute /1を使うことに注意して下さい。
「ゴール名」はアトムでなければならず、「引数リスト」は引数のリストでなければなりません。
call/2はいくつかの部分から述語をつくり、それをただちに呼び出す場合に便利です。これは以下の定義と同等ですが、より効率的に実現されています。
?- X = (!,fail), write(test1), call(X) ; write(test2).
test1
no
?- X = (!,fail), write(test1), execute(X) ; write(test2).
test1test2
X = _636
yes
?- Z = member(A,[U,v,W]), U = uuu, Z.
Z = member(uuu,v,_664)
A = uuu
U = uuu
W = _664
yes
?- _
execute/2は、call/2と等価なものとして定義されています。
値を持たない変数を関数子として使うこと、例えば"P(X,Y)"などの使用はIF/Prologでは許されていません。
call(GoalName,ArgList):-
Goal = ..[GoalName|ArgList],
call(Goal).
undefined_predicate ゴールが定義されていない
illegal_predicate ゴールが値を持っていない
|