3:-module(cplint_test,
    4  [close_to/2,close_to/3,relatively_close_to/2,relatively_close_to/3,run/1,
    5  perm/2,perm_map/2]).    6
    7:- meta_predicate run(:).    8
    9perm(A,B):-
   10	permutation(A,B),!.
   11perm_map(L,LR):-
   12    maplist(permutation,L,LR), !.
   13
   14run(M:H):-
   15	copy_term(H,NH),
   16	numbervars(NH),
   17%	NH=(_Query,close_to('P',_Prob)),
   18	format("~p.~n",[NH]),
   19	(H=(G,R)),
   20	time(call(M:G)),!,
   21	format("\t~p.~n~n",[G]),
   22	call(R).
   23
   24epsilon(0.09).
   25
   26close_to(V,T):-
   27	epsilon(E),
   28	TLow is T-E,
   29	THigh is T+E,
   30	TLow=<V,
   31	V=<THigh.
   32
   33close_to(V,T,E):-
   34	TLow is T-E,
   35	THigh is T+E,
   36	TLow=<V,
   37	V=<THigh.
   38
   39relative_epsilon(0.1).
   40
   41relatively_close_to(V,T):-
   42	relative_epsilon(E),
   43	TLow is T*(1-E),
   44	THigh is T*(1+E),
   45	TLow=<V,
   46	V=<THigh.
   47
   48relatively_close_to(V,T,E):-
   49	TLow is T*(1-E),
   50	THigh is T*(1+E),
   51	TLow=<V,
   52	V=<THigh