2016-04-18 1 views
2

В соответствии с руководством, time(+Goal) выполняет Goal и печатает, среди прочего, количество используемых логических выводов.Как вызвать цель и связать количество логических выводов с переменной в Prolog?

Как я могу связать количество логических выводов с переменной?

ответ

3

Этот код относится к 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. 
0

Вы можете установить «крючок» для нескольких системных интерфейсов, среди которых message_hook, просто объявив его в модуле пользователя. Теперь отфильтруйте для Kind=information и Term=time(NumInferences,_,_,_) и сохраните его в global variable.

Смежные вопросы