18static char SccsId[] =
"%W% %G%";
27p_in_range( USES_REGS1 ) {
35 if (IsFloatTerm(t)) i = FloatOfTerm(t);
else i = IntegerOfTerm(t);
37 if (IsFloatTerm(t)) j = FloatOfTerm(t);
else j = IntegerOfTerm(t);
40 if (IsFloatTerm(t)) i = FloatOfTerm(t);
else i = IntegerOfTerm(t);
42 if (IsFloatTerm(t)) j = FloatOfTerm(t);
else j = IntegerOfTerm(t);
45 if (IsFloatTerm(t)) i = FloatOfTerm(t);
else i = IntegerOfTerm(t);
47 if (IsFloatTerm(t)) j = FloatOfTerm(t);
else j = IntegerOfTerm(t);
50 if (IsFloatTerm(t)) i = FloatOfTerm(t);
else i = IntegerOfTerm(t);
52 if (IsFloatTerm(t)) j = FloatOfTerm(t);
else j = IntegerOfTerm(t);
54 return fabs(sqrt(d1*d1 + d2*d2 + d3*d3)-i) <= j;
59p_in_range2( USES_REGS1 ) {
67 p1 = RepAppl(Deref(ARG1));
68 arity = ArityOfFunctor((
Functor)*p1);
70 p2 = RepAppl(Deref(ARG2))+(arity-2);;
73 if (IsFloatTerm(t)) i = FloatOfTerm(t);
else i = IntegerOfTerm(t);
75 if (IsFloatTerm(t)) j = FloatOfTerm(t);
else j = IntegerOfTerm(t);
78 if (IsFloatTerm(t)) i = FloatOfTerm(t);
else i = IntegerOfTerm(t);
80 if (IsFloatTerm(t)) j = FloatOfTerm(t);
else j = IntegerOfTerm(t);
83 if (IsFloatTerm(t)) i = FloatOfTerm(t);
else i = IntegerOfTerm(t);
85 if (IsFloatTerm(t)) j = FloatOfTerm(t);
else j = IntegerOfTerm(t);
88 if (IsFloatTerm(t)) i = FloatOfTerm(t);
else i = IntegerOfTerm(t);
90 if (IsFloatTerm(t)) j = FloatOfTerm(t);
else j = IntegerOfTerm(t);
92 return fabs(sqrt(d1*d1 + d2*d2 + d3*d3)-i) <= j;
96p_euc_dist( USES_REGS1 ) {
97 Term t1 = Deref(ARG1);
98 Term t2 = Deref(ARG2);
99 double d1 = (double)(IntegerOfTerm(ArgOfTerm(1,t1))-IntegerOfTerm(ArgOfTerm(1,t2)));
100 double d2 = (double)(IntegerOfTerm(ArgOfTerm(2,t1))-IntegerOfTerm(ArgOfTerm(2,t2)));
101 double d3 = (double)(IntegerOfTerm(ArgOfTerm(3,t1))-IntegerOfTerm(ArgOfTerm(3,t2)));
102 Int result = (Int)sqrt(d1*d1+d2*d2+d3*d3);
103 return(Yap_unify(ARG3,MkIntegerTerm(result)));
107volatile int loop_counter = 0;
110p_loop( USES_REGS1 ) {
111 while (loop_counter == 0);
120 Term cm = CurrentModule;
121 CurrentModule = RANGE_MODULE;
122 Yap_InitCPred(
"euclidean_distance", 3, p_euc_dist, SafePredFlag);
124 Yap_InitCPred(
"loop", 0, p_loop, SafePredFlag);
126 Yap_InitCPred(
"in_range", 8, p_in_range, TestPredFlag|SafePredFlag);
127 Yap_InitCPred(
"in_range", 4, p_in_range2, TestPredFlag|SafePredFlag);