如何调用目标并将逻辑推理的数量绑定到Prolog中的变量?

时间:2016-04-18 15:58:13

标签: prolog swi-prolog

根据手册,time(+Goal)执行Goal并打印所使用的逻辑推理的数量等。

如何将逻辑推理的数量绑定到变量?

2 个答案:

答案 0 :(得分:4)

以下代码特定于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.

答案 1 :(得分:1)

您可以安装'几个系统接口的挂钩,其中包括message_hook,只是在模块用户中声明它。现在,过滤Kind=informationTerm=time(NumInferences,_,_,_)并将其存储在global variable