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