The Common Prolog system comes with a built-in read-query-print
loop similar to a Prolog interpreter loop. To run it, make sure the common-prolog package is accessible and type: (rqp)
. You will be presented with the prompt: ==>
. At this point you may type in goal expressions, for example:
|==> (append ?x ?y (1 2)) | |?X = NIL |?Y = (1 2)
Now Common Prolog is waiting for you to indicate whether or not you wish more solutions. If you press Return
, you will get the message OK
and return to the top level:
|?X = NIL |?Y = (1 2)<RETURN> | |OK. | |==>
If you hit ;
(semicolon) following the retrieval of a solution, the system will attempt to resatisfy your goal:
|?X = NIL |?Y = (1 2); | |?X = (1) |?Y = (2); | |?X = (1 2) |?Y = NIL; | |NO. | |==>
When no more solutions remain, NO.
is displayed and you are back at the top level.
To request the solution of multiple goals, use: (and <goal1> ... <goalN>)
.
For example:
|==> (and (member ?x (2 3)) (append (?x) (foo) ?y)) | |X = 2 |Y = (2 FOO) | |OK. | |==>
It is possible to type logic definitions directly into the interpreter. The resulting Lisp code will be compiled in memory and you may use the definition immediately, for example.:
|==> (defrel color | ((color red)) | ((color blue)) | ((color green))) | |<... various compilation messages ...> | |YES. |OK. | |==> (color ?x) | |?X = RED
The Common Prolog interpreter may be exited by typing:
|==> (halt)
KnowledgeWorks and Prolog User Guide (Macintosh version) - 01 Dec 2021 19:35:39