72 lines
2.0 KiB
Prolog
72 lines
2.0 KiB
Prolog
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
Written April 2020 by Markus Triska (triska@metalevel.at)
|
|
Part of Scryer Prolog.
|
|
|
|
This library provides predicates for reasoning about time.
|
|
Reasoning about time stamps would be a useful addition, for example
|
|
by obtaining the current time, comparing and formatting it.
|
|
|
|
'$cpu_new' can be replaced by statistics/2 once that is implemented.
|
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
|
|
:- module(time, [max_sleep_time/1, sleep/1, time/1]).
|
|
|
|
:- use_module(library(format)).
|
|
:- use_module(library(iso_ext)).
|
|
|
|
max_sleep_time(0xfffffffffffffbff).
|
|
|
|
sleep(T) :-
|
|
builtins:must_be_number(T, sleep),
|
|
( T < 0 ->
|
|
throw(error(domain_error(not_less_than_zero, T), sleep/1))
|
|
; max_sleep_time(N), T > N ->
|
|
throw(error(reprensentation_error(max_sleep_time), sleep/1))
|
|
; '$sleep'(T)
|
|
).
|
|
|
|
time(Goal) :-
|
|
'$cpu_now'(T0),
|
|
setup_call_cleanup(true,
|
|
( Goal,
|
|
report_time(T0)
|
|
),
|
|
report_time(T0)).
|
|
|
|
report_time(T0) :-
|
|
'$cpu_now'(T),
|
|
Time is T - T0,
|
|
( bb_get('$first_answer', true) ->
|
|
format(" % CPU time: ~3f seconds~n", [Time])
|
|
; format("% CPU time: ~3f seconds~n ", [Time])
|
|
).
|
|
|
|
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
?- time((true;false)).
|
|
% CPU time: 0.000 seconds
|
|
true
|
|
; % CPU time: 0.001 seconds
|
|
false.
|
|
|
|
:- time(use_module(library(clpz))).
|
|
% CPU time: 2.762 seconds
|
|
true
|
|
; false.
|
|
|
|
:- time(use_module(library(lists))).
|
|
% CPU time: 0.000 seconds
|
|
true
|
|
; % CPU time: 0.001 seconds
|
|
false.
|
|
|
|
?- time(member(X, [a,b,c])).
|
|
% CPU time: 0.000 seconds
|
|
X = a
|
|
; % CPU time: 0.002 seconds
|
|
X = b
|
|
; % CPU time: 0.004 seconds
|
|
X = c
|
|
; % CPU time: 0.007 seconds
|
|
false.
|
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|