有没有办法对几个Prolog程序进行基准测试?我正在使用SWI-Prolog,它没有显示执行查询所花费的时间!!
答案 0 :(得分:8)
time/1
怎么样?在SWI-Prolog中,尝试:
?- time(your_goal).
和
?- profile(your_goal).
答案 1 :(得分:1)
meta_predicate time:call_with_time_limit(+,0).
time:call_with_time_limit(A, C) :-
A>0, !,
setup_call_cleanup(alarm(A, time_limit_exceeded(A), B, [install(false)]), run_alarm_goal(B, C), remove_alarm_notrace(B)).
time:call_with_time_limit(_, _) :-
throw(time_limit_exceeded).
您可以定义查询的时间限制,在不同的查询上执行该操作并在该时间段内比较结果的数量,这不是那么有效,但这就是我到目前为止所发现的
答案 2 :(得分:1)
在GNU-Prolog中,时间谓词可以取自Prolog Compatibility Layers。
参考David Reitter's GNU Prolog compatibility layer:
%time
time(Goal) :-
cpu_time(CPU),
Goal,
cpu_time(CPU2),
CPUT is CPU2-CPU,
write('time: '), write(CPUT), write('ms.\n').
time(Text, Goal) :-
cpu_time(CPU),
Goal,
cpu_time(CPU2),
CPUT is CPU2-CPU,
write(Text), write(': '), write(CPUT), write('ms.\n').