Hello Prolog users, I am trapped in passing negative integer value from C to Prolog using the interface.
Here is the thing, I have two files, one Prolog source code and a C source code. Basically a variable defined in C has the value (*-2*), and the Prolog code tries to read it in. I use the standard interface like this in Prolog to get the value: :- foreign(c_foo( -integer)). However, even though the value defined in C code is *-2*, what I got in Prolog (I write it out in Prolog after the above wrapper return) is 4294967294 Follow the instruction <http://www.gprolog.org/manual/html_node/gprolog068.html>, I tried other Foreign Type (positive, number ) which are like :- foreign(c_foo( -positive)). :- foreign(c_foo( -number)). But it still gives me the wrong answer... So I am wondering if it is possible to pass a negative integer from C to GNU-Prolog..? The attachments are the source code and Makefile, I have simplified it and hope it could be understandable. *The test is on Linux 14.04 64bit, GNU -Prolog 1.3.0* Am I clear enough? Could anyone give me some help? Best, Shuai
#include <gprolog.h>
int babel_wrapper_foo(int n)
{
int return_value;
int func;
PlTerm arg[2];
PlBool res;
func = Pl_Find_Atom("foo");
Pl_Query_Begin(PL_FALSE);
arg[0] = Pl_Mk_Integer(n);
arg[1] = Pl_Mk_Variable();
res = Pl_Query_Call(func, 2, arg);
return_value = Pl_Rd_Integer(arg[1]);
Pl_Query_End(PL_KEEP_FOR_PROLOG);
return return_value;
}
int main(int argc , char **argv )
{
Pl_Start_Prolog(argc, argv);
babel_wrapper_foo(1);
Pl_Stop_Prolog();
return (0);
}
:- foreign(c_foo( -integer)). foo(N, A_SSA_2) :- c_foo(TMP), write(TMP), nl.
#include <gprolog.h>
#include <stdio.h>
#include <stdlib.h>
PlBool c_foo(int * ret)
{
*ret = -2;
return PL_TRUE;
}
Makefile
Description: Binary data
_______________________________________________ Users-prolog mailing list [email protected] https://lists.gnu.org/mailman/listinfo/users-prolog
