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 ゴールが値を持っていない
| scroll to top |
|