99 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| PySWIP README
 | |
| ============
 | |
| 
 | |
| :Version: 
 | |
| 	0.2.2
 | |
| 
 | |
| :Author:
 | |
|     Yuce Tekol. <yucetekol@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.
 | |
| 
 |