Hi all, I'm trying to call my prolog program from C, but am having trouble. The program itself takes a sentence in English and parses it out into something like:
sentence(subject(np(det(the),noun(boy))),predicate(vp(intrans_v(gives)))) To do this, in my C program, I call read_line/1 which reads the line and puts each word in a list that is given as the argument: [the,boy,gives,'.'] (I found read_line/1 at http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/read_linepl.txt and modified it to work with gprolog) My C code does the following to get that input and copy it to another PlTerm* called sentence to use as the argument in a later call: Pl_Query_Begin(TRUE); input[0] = Mk_Variable(); Pl_Query_Call(Find_Atom("read_line"), 1, input); Copy_Term(&sentence[1],input); Pl_Query_End(PL_CUT); Pl_Query_Begin(TRUE); sentence[0] = Mk_String(str); /* sentence[0] = Parse_form */ The prolog predicate c_parse/2 looks like this: c_parse(Parse_form,Input) :- trim_period(Input,I), (s(Parse_form,I,[]);comp_s(Parse_form,I,[])). Parse_form is the result which would look like the output I gave above. Input is the list. trim_period/2 removes the period at the end of the list and leaves the result in the term I. s/3 and comp_s/3 parses I and leaves the result in Parse_form. At this point in the C program, i call parsed = Pl_Query_Call(Find_Atom("c_parse"), 2, sentence); and i get Fatal Error: Segmentation Violation_#219430624 and the program crashes. I have no idea what is going on. Can anyone help? thanks in advance, CB _______________________________________________ Users-prolog mailing list [email protected] http://lists.gnu.org/mailman/listinfo/users-prolog
