Exception Problem
Vasco Pires <[email protected]>
| Newsgroups | gmane.comp.gnu.prolog.general |
|---|---|
| Message-ID | <[email protected]> |
Dear All,
I have a strange problem while calling Prolog from C.
In my project a call from C a Prolog predicate, that in some point
calls a C function to validate some data.
The problem is that the prolog predicate returns an exception to the C
code. The strange thing about this is that the C function that is
called from prolog returns False, and consequently fails the predicate.
If i comment this line and write Fail. The program works just fine and
doesn't return the exception.
Here is my C code that calls prolog:
int plGetBasicDecision( char** name, int *argument, double *xPos,
double *yPos, double *thetaPos )
{
int func;
WamWord arg[14];
Bool res;
int decision;
func = Find_Atom("makeAdvancedDecision");
Pl_Query_Begin(TRUE);
arg[0] = Mk_Variable();
arg[1] = Mk_Variable();
arg[2] = Mk_Variable();
arg[3] = Mk_Variable();
arg[4] = Mk_Variable();
arg[5] = Mk_Variable();
res = Pl_Query_Call( func, 6, arg );
if(res == 1) {
decision = Rd_Integer(arg[0]);
*name = Rd_String(arg[1]);
*argument = Rd_Integer(arg[2]);
*xPos = Rd_Float(arg[3]);
*yPos = Rd_Float(arg[4]);
*thetaPos = Rd_Float(arg[5]);
} else {
PlTerm except = Pl_Get_Exception();
printf("Exception of type: %d\n\n", Type_Of_Term(except));
decision = -1;
name = NULL;
}
Pl_Query_End(TRUE);
return decision;
}
Here is my prolog code that calls the C function:
fluentHasBall( Robot, s0 ) :-
plRobotHasBall( Robot ).
it returns an exception, and if I change to this:
fluentHasBall( Robot, s0 ) :-
fail.
it works just fine. the C function is:
Bool plRobotHasBall( char* Robot )
{
return FALSE;
}
Best Regards,
Vasco Pires
------------------------------------------------------------------
"Don't close your eyes unless you can dream. Don't open your eyes
unless you can believe!"
------------------------------------------------------------------