port of PYSWIP package.
This commit is contained in:
117
packages/pyswip/setup.py
Normal file
117
packages/pyswip/setup.py
Normal file
@@ -0,0 +1,117 @@
|
||||
|
||||
# PySWIP setup script
|
||||
|
||||
import sys
|
||||
import os
|
||||
import os.path
|
||||
from distutils.core import setup
|
||||
|
||||
setup(name="pyswip",
|
||||
version="0.2.2",
|
||||
url="http://code.google.com/p/pyswip/",
|
||||
download_url="http://code.google.com/p/pyswip/downloads/list",
|
||||
author="Yuce Tekol",
|
||||
author_email="yucetekol@gmail.com",
|
||||
description="PySWIP enables querying SWI-Prolog and YAP in your Python programs.",
|
||||
long_description="""
|
||||
PySWIP 0.2.2
|
||||
============
|
||||
|
||||
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 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.
|
||||
|
||||
News
|
||||
----
|
||||
|
||||
* Importing ``pyswip`` automatically initializes SWI-Prolog.
|
||||
* Fixed a bug with querying lists with the new interface.
|
||||
|
||||
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
|
||||
|
||||
Outputs:
|
||||
Hello, john
|
||||
Hello, gina
|
||||
""",
|
||||
license="GPL",
|
||||
packages=["pyswip"],
|
||||
classifiers=[
|
||||
'Development Status :: 3 - Alpha',
|
||||
'Intended Audience :: Developers',
|
||||
'Intended Audience :: Science/Research',
|
||||
'License :: OSI Approved :: GNU General Public License (GPL)',
|
||||
'Operating System :: OS Independent',
|
||||
'Programming Language :: Python',
|
||||
'Topic :: Scientific/Engineering :: Artificial Intelligence',
|
||||
'Topic :: Software Development :: Libraries :: Python Modules'
|
||||
],
|
||||
)
|
||||
|
Reference in New Issue
Block a user