是否有可能在 Swi-Prolog 中获得以微秒为单位的经过时间?

Is it possible to get elapsed time in microseconds in Swi-Prolog?

简单的问题。

我需要计算执行谓词X需要多长时间。所以我写了这个谓词:

chronometrise(X) :-
    write('Executing: '), write(X), nl, nl,
    statistics(walltime, _), call(X), statistics(walltime, [_,E]),
    nl, write('Time: '), write(E), write(' ms.'), nl.

这让我可以得到以毫秒为单位的时间。但是我需要微秒。

是否可以在 Swi-Prolog 中进行计算?或者毫秒是最好的精度?

编辑:好吧,我找到了一个更好的方法:执行谓词 1000 次并计算经过的时间。这将为我们提供以毫秒为单位的平均执行时间乘以 1000,这恰好是以微秒为单位的平均运行时间。

不使用 statistics(walltime, _),而是使用 get_time(Time)。这 returns 一个浮点数的墙上时间戳。报告时间的分辨率取决于 OS。 walltime 统计数据源自 Quintus 兼容性。