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

如何调用目标并将逻辑推理的数量绑定到Prolog中的变量?,prolog,swi-prolog,Prolog,Swi Prolog,根据手册,time(+Goal)执行Goal并打印所用逻辑推理的数量 如何将逻辑推理的数量绑定到一个变量?您可以为多个系统接口“安装”一个钩子,其中包括,只需在用户模块中声明即可。现在,筛选Kind=information和Term=time(numReferences,,,,,),并将其存储在存储库中。以下代码特定于SWI Prolog。目前,许多其他序言不允许计算推断的数量,这主要是由于许多不同的优化会模糊该数量 :- meta_predicate(call_inferences(0, -)

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


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

您可以为多个系统接口“安装”一个钩子,其中包括,只需在用户模块中声明即可。现在,筛选
Kind=information
Term=time(numReferences,,,,,)
,并将其存储在存储库中。

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