PySWIP 0.2.0 released
yuce
yucetekol at gmail.com
Thu Jun 28 11:30:54 CEST 2007
I am pleased to announce the 0.2.0 version of PySWIP.
PySWIP is a GPL'd 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 prior
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.
== News ==
* Prolog.query returns real Python datatypes.
* New Pythonic interface (See the last example).
* Several new examples, including Markus Triska's *Sudoku Solver*.
* Prolog module support.
* Foreign functions retrieve Python datatypes.
== 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.
== Example (Pythonic interface) ==
from pyswip import Prolog, 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
Outputs:
Hello, john
Hello, gina
PySWIP homepage: http://code.google.com/p/pyswip
Downloads: http://code.google.com/p/pyswip/downloads/list
Subversion repo: http://pyswip.googlecode.com/svn/trunk
Discussion Group: http://groups.google.com/group/pyswip
Regards,
Yuce Tekol yucetekol [at] gmail [dot] com>
More information about the Python-announce-list
mailing list