[Up] [Contents] [Index] [Summary]

5.7.1 A simple example

The following is a very simple example going through all the steps outlined above. It provides an arithmetic expression evaluator. We will call the application calc and define it in the files calc.c and calc.pl. The Prolog file is simple:

calc(Atom) :- term_to_atom(Expr, Atom), A is Expr, write(A), nl.

The C-part of the application parses the command-line options, initialises the Prolog engine, locates the calc/1 predicate and calls it. The coder is in figure 10.

#include <stdio.h> #include <SWI-Prolog.h> PL_extension PL_extensions [] = { /*{ "name", arity, function, PL_FA_<flags> },*/ { NULL, 0, NULL, 0 } /* terminating line */ }; #define MAXLINE 1024 int main(int argc, char **argv, char **env) { char expression[MAXLINE]; char *e = expression; char *program = argv[0]; char *plav[2]; int n; /* combine all the arguments in a single string */ for(n=1; n<argc; n++) { if ( n != 1 ) *e++ = ' '; strcpy(e, argv[n]); e += strlen(e); } /* make the argument vector for Prolog */ plav[0] = program; plav[1] = NULL; /* initialise Prolog */ if ( !PL_initialise(1, plav, env) ) PL_halt(1); /* Lookup calc/1 and make the arguments and call */ { predicate_t pred = PL_predicate("calc", 1, "user"); term_t h0 = PL_new_term_refs(1); int rval; PL_put_atom_chars(h0, expression); rval = PL_call_predicate(NULL, FALSE, pred, h0); PL_halt(rval ? 0 : 1); } return 0; }

Figure 10 : C-source for the calc application

The application is now created using the following command-line:

% plld -o calc calc.c calc.pl

The following indicates the usage of the application:

% calc pi/2 1.5708