Executing prolog queries from shell

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Executing prolog queries from shell

Antonios Antoniadis


Hello everyone.

I started building the left hemisphere of my robot's brain with gprolog and I'm stuck on probably a very basic thing as I haven't touched prolog since uni. I want to execute/pass/pipe/whatever queries/code into prolog from the GNU/Linux shell and save/use the results. Like friends(bob,alice) to see if they are friends or whatever. I can run any shell command via python or the shell itself of course but what/how should I run (sysntax) to e.g. have gprolog use a specific file with my stored rules or whatever (complied I guess) and pass the query like an argument or input? Actually, is this possible at all?

I hope I didn't confuse you!


Thank you,

Antonios A.


_______________________________________________
Users-prolog mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/users-prolog
Reply | Threaded
Open this post in threaded view
|

Re: Executing prolog queries from shell

Daniel Diaz-3
Hi,

there several ways to do what you want. Basically, you have to: 1)
launch prolog, 2) consult your file, 3) execute your query, 4) save your
results (on a file).

Since it is not clear what you want to do exactly I give you some (a lot
of) pointers:

You can launch gprolog with special argument(s) to execute goal(s) (more
or less immediately). See:
http://gprolog.org/manual/html_node/gprolog007.html
In that case you execute gprolog with the args from your python code.

You can write a PrologScript (shebang) basically start your source file
with #!/usr/bin/gprolog --consult-file. See:
http://gprolog.org/manual/html_node/gprolog007.html#sec11
In that case you execute the script from your python code (don't forget
the chmod u+x).

Use the :- initialization(....) directive to execute an initial goal. See:
http://gprolog.org/manual/html_node/gprolog022.html#initialization%2F1

To get the command-line arguments you can use for instanceargument_list(L)
http://gprolog.org/manual/html_node/gprolog051.html#argument-counter%2F1

To save the result of your query you can use streams and term I/O.
Streams: http://gprolog.org/manual/html_node/gprolog034.html
Term output:
http://gprolog.org/manual/html_node/gprolog038.html#write-term%2F3

To quit gprolog execute the goal: halt.
http://gprolog.org/manual/html_node/gprolog042.html#abort%2F0

Finally, note that you can also compile your source file to native code
with:
gplc my_app.pl--no-top-level--no-debugger

you can add options like
gplc my_app.pl--no-top-level--no-debugger

or even
gplc my_app.pl--min-size

See: http://gprolog.org/manual/html_node/gprolog009.html

Then execute it (from your python code) simply with:
./my_app

NB: use :- intialization(YOUR INIT GOAL) and halt to control the start
and the end of your Prolog application.

Daniel

Le 10/12/2013 18:05, Antonios Antoniadis a écrit :

>
> Hello everyone.
>
> I started building the left hemisphere of my robot's brain with gprolog and I'm stuck on probably a very basic thing as I haven't touched prolog since uni. I want to execute/pass/pipe/whatever queries/code into prolog from the GNU/Linux shell and save/use the results. Like friends(bob,alice) to see if they are friends or whatever. I can run any shell command via python or the shell itself of course but what/how should I run (sysntax) to e.g. have gprolog use a specific file with my stored rules or whatever (complied I guess) and pass the query like an argument or input? Actually, is this possible at all?
>
> I hope I didn't confuse you!
>
>
> Thank you,
>
> Antonios A.
>
>
> _______________________________________________
> Users-prolog mailing list
> [hidden email]
> https://lists.gnu.org/mailman/listinfo/users-prolog
>


--
Ce message a ete verifie par MailScanner
pour des virus ou des polluriels et rien de
suspect n'a ete trouve.


_______________________________________________
Users-prolog mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/users-prolog