forked from yuce/pyswip
-
Notifications
You must be signed in to change notification settings - Fork 1
/
README
118 lines (85 loc) · 3.26 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
This fork of PySWIP is a modifiaction to be able to use swi-prolog with python3.
You are free to use but be aware that this is not meant to be an official python3 version or so...
The tests ran successfully on my machine (ubuntu 14.04 x64 with python 3.2.5 and 3.4.0).
However this doesn't mean there are no bugs anymore. I will try to maintain this fork but only for my personal use.
Issues are therefore not guaranteed to be considered and/or investigated by me.
Here is the original README:
PySWIP README
============
:Version:
0.2.3
:Maintainer:
Rodrigo Starr <rodrigo.starr@gmail.com>
:Author:
Yuce Tekol <yucetekol@gmail.com>
Rodrigo Starr <rodrigo.starr@gmail.com>
:Project Website:
http://code.google.com/p/pyswip
Introduction
------------
PySWIP is a Python - SWI-Prolog bridge enabling to query SWI-Prolog in your
Python programs. It features an (incomplete) SWI-Prolog foreign language
interface, a utility class that makes it easy querying with Prolog and also a
Pythonic interface.
Since PySWIP uses SWI-Prolog as a shared library and ctypes to access it, it
doesn't require compilation to be installed.
Note that this version of PySWIP is slightly incompatible with 0.1.x versions.
Requirements:
-------------
* Python 2.3 and higher.
* ctypes 1.0 and higher.
* SWI-Prolog 5.6.x and higher (most probably other versions will also work).
* libpl as a shared library.
* Works on Linux and Win32, should work for all POSIX.
Example (Using Prolog):
-----------------------
>>> from pyswip import Prolog
>>> prolog = Prolog()
>>> prolog.assertz("father(michael,john)")
>>> prolog.assertz("father(michael,gina)")
>>> list(prolog.query("father(michael,X)"))
[{'X': 'john'}, {'X': 'gina'}]
>>> for soln in prolog.query("father(X,Y)"):
... print soln["X"], "is the father of", soln["Y"]
...
michael is the father of john
michael is the father of gina
Since version 0.1.3 of PySWIP, it is possible to register a Python function as a
Prolog predicate through SWI-Prolog's foreign language interface.
Example (Foreign Functions):
----------------------------
from pyswip import Prolog, registerForeign
def hello(t):
print "Hello,", t
hello.arity = 1
registerForeign(hello)
prolog = Prolog()
prolog.assertz("father(michael,john)")
prolog.assertz("father(michael,gina)")
list(prolog.query("father(michael,X), hello(X)"))
Outputs:
Hello, john
Hello, gina
Since version 0.2, PySWIP contains a 'Pythonic' interface which allows writing
predicates in pure Python (*Note that interface is experimental.*)
Example (Pythonic interface):
-----------------------------
from pyswip import Functor, Variable, Query
assertz = Functor("assertz", 2)
father = Functor("father", 2)
call(assertz(father("michael","john")))
call(assertz(father("michael","gina")))
X = Variable()
q = Query(father("michael",X))
while q.nextSolution():
print "Hello,", X.value
q.closeQuery()
Outputs:
Hello, john
Hello, gina
The core functionality of ``Prolog.query`` is based on Nathan Denny's public
domain prolog.py found at
http://www.ahsc.arizona.edu/~schcats/projects/docs/prolog-0.2.0.html
Install
-------
Please see ``INSTALL`` for detailed instructions.