マニュアルによれば、time(+Goal)
はGoal
を実行し、とりわけ使用される論理推論の数を表示します。目標を呼び出し、論理推論の数をPrologの変数にバインドするにはどうすればよいですか?
論理推論の数を変数にバインドする方法を教えてください。
マニュアルによれば、time(+Goal)
はGoal
を実行し、とりわけ使用される論理推論の数を表示します。目標を呼び出し、論理推論の数をPrologの変数にバインドするにはどうすればよいですか?
論理推論の数を変数にバインドする方法を教えてください。
次のコードは、SWI-Prologに固有のコードです。現在のところ、多くの他のPrologは推論の数をカウントすることを許可していません。主に、その数をぼかすさまざまな最適化のためです。
:- meta_predicate(call_inferences(0, -)).
call_inferences(Goal_0, Inferences) :-
statistics(inferences, I0),
Goal_0,
statistics(inferences, I1),
Inferences is I1-I0-1.
使用法:
?- call_inferences(true,N).
N = 1.
?- call_inferences(nreverse([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],L), N).
L = [30, 29, 28, 27, 26, 25, 24, 23, 22|...],
N = 496.
いくつかのシステムインターフェイスのフックを 'インストール'することができます。その中には、message_hookの中でモジュールユーザーで宣言するだけです。次に、Kind=information
とTerm=time(NumInferences,_,_,_)
のフィルタを適用し、global variableに保存します。