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