Need help with pyswip?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

yuce
277 Stars 72 Forks MIT License 246 Commits 34 Opened issues

Description

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.

Services available

!
?

Need anything else?

Contributors list

# 57,308
Git
Lisp
openapi
prolog
58 commits
# 287,560
Python
Shell
TeX
prolog
7 commits
# 432,883
C++
TeX
prolog
logic-p...
5 commits
# 522,349
Python
TeX
prolog
logic-p...
2 commits
# 509,233
Shell
TeX
prolog
logic-p...
2 commits
# 367,086
Shell
bible
Common ...
logic-p...
2 commits
# 129,210
TeX
pushbul...
JavaFX
biblate...
2 commits
# 580,666
TeX
prolog
logic-p...
Jupyter...
1 commit
# 16,106
C++
pcl
pointcl...
c-plus-...
1 commit
# 35,648
Ada
webasse...
coreuti...
microke...
1 commit
# 110,029
TeX
prolog
meteor
HTML
1 commit
# 550,458
TeX
prolog
logic-p...
Dart
1 commit
# 355,369
Python
TeX
prolog
logic-p...
1 commit
# 26,970
HTML
html-te...
Bootstr...
covid19
1 commit
# 191,628
C++
retroga...
macOS
Shell
1 commit
# 380,284
TeX
prolog
logic-p...
Shell
1 commit

PySwip


The End of Python 2 Support

Python 2 has reached end of life on January 1st, 2020 as documented here. So, PySwip 0.2.10 will be the last version which officially supports Python 2.

Do you still require Python 2 support? Let us know at: https://github.com/yuce/pyswip/issues/94


What's New?

See the CHANGELOG.

This library is being cleaned up and refactored. Expect API breakage and incompatibility with previous versions.

WARNING! PySwip has no Windows installers! If you are a Windows user, see INSTALL. There are some "free download" sites that claim to be hosting PySwip installers. DO NOT TRUST THEM!

Thanks to all contributors.

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.

Requirements:

  • Python 2.7 or 3.4 and higher.
    • PyPy is currently not supported.
  • SWI-Prolog 7.2.x and higher.
  • libswipl
    as a shared library. This is the default on most platforms.
  • Works on Linux, Windows, MacOS and FreeBSD. Should work on other POSIX.

Install

IMPORTANT: Make sure the SWI-Prolog architecture is the same as the Python architecture. If you are using a 64bit build of Python, use a 64bit build of SWI-Prolog, etc.

See INSTALL for instructions.

Examples

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

An existing knowledge base stored in a Prolog file can also be consulted, and queried. Assuming the filename "knowledge_base.pl" and the Python is being run in the same working directory, it is consulted like so:

>>> from pyswip import Prolog
>>> prolog = Prolog()
>>> prolog.consult("knowledge_base.pl")

Foreign Functions

from __future__ import print_function
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)") print(list(prolog.query("father(michael,X), hello(X)")))

Pythonic interface (Experimental)

from __future__ import print_function
from pyswip import Functor, Variable, Query, call

assertz = Functor("assertz", 1) 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.

Help!

Projects/Publications that Use or Reference PySwip

Do you have a project, video or publication that uses/mentions PySwip? file an issue or send a pull request.

If you would like to reference PySwip in a LaTeX document, you can use the provided BibTeX file.

Books

Publications

Videos

Projects

Blog Posts

Companies using PySwip

  • Magazino GmbH Magazino develops and builds intelligent, mobile robots for intralogistics.

License

Copyright (c) 2007-2020 Yüce Tekol and PySwip contributors

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.