云网牛站
所在位置:首页 > Linux软件 > 在Linux系统下安装PySwip的方法及使用PySwip的例子

在Linux系统下安装PySwip的方法及使用PySwip的例子

2021-04-27 15:41:27作者:李燕稿源:云网牛站

本文介绍在Linux系统下安装PySwip的方法,可安装在Arch Linux、Debian、Ubuntu、Fedora等系统中,同时还介绍使用PySwip的例子。

 

简介

PySwip是一个Python-SWI-Prolog桥,可在您的Python程序中查询SWI-Prolog。它具有一个SWI-Prolog外语接口,一个实用程序类,可以方便地使用Prolog进行查询,并且还具有Pythonic接口。

由于PySwip使用SWI-Prolog作为共享库和ctypes来访问它,因此不需要安装编译。

注:由于Python 2已经终止支持,所以PySwip 0.2.10是正式支持Python 2的最后一个版本(Python 2最后一个版本是Python 2.7.18:附Python-2.7.18.tgz下载)。

 

下载链接

PySwip下载地址:https://github.com/yuce/pyswip/releases

在Linux系统下安装PySwip的方法及使用PySwip的例子

 

要求

1、Python 2.7或3.4及更高版本。目前不支持PyPy。

2、SWI-Prolog 7.2.x及更高版本。

3、libswipl作为共享库。这是大多数平台上的默认设置。

4、适用于Linux、Windows、MacOS和FreeBSD。

 

安装方法

PySwip除了Python的标准库外没有其他依赖项。某些操作系统未安装完整的标准库。在这种情况下,请确保您的Python设置包含ctypes。

我们建议将PySwip安装到虚拟环境中。Python3已经对此提供了内置支持。您可以使用以下方法在pyswip_env目录中创建虚拟环境:

python3 -m venv pyswip_env

之后,您必须激活虚拟环境。在带有BASH/csh/tcsh shell的类UNIX平台(Linux、MacOS、FreeBSD等)上:

source pyswip_env/bin/activate

重要信息:确保SWI-Prolog架构与Python架构相同。如果您使用的是64位版本的Python,请使用64位的SWI-Prolog等。

1、Arch Linux

使用以下命令安装具有依赖项的PySwip:

sudo pacman -S python-pyswip

2、Debian、Ubuntu

安装SWI-Prolog:

sudo apt install swi-prolog

如果您不想使用X绑定,只需使用swi-prolog-nox包。

如前所述安装并激活虚拟环境。

使用以下命令从Python软件包索引安装pyswip:

pip install pyswip

通过在Python控制台上运行以下代码来运行快速测试:

from pyswip import Prolog

prolog = Prolog()

prolog.assertz("father(michael,john)")

3、Manjaro Linux

安装:

pamac install python-pyswip

pacman -S python-pyswip

卸载:

pamac remove python-pyswip

pacman -R python-pyswip

4、Fedora

可使用以下命令安装具有依赖项的PySwip for Python 3:

sudo dnf install python3-pyswip

可使用以下命令安装具有依赖项的PySwip for Python 2:

sudo dnf install python3-pyswip

 

PySwip例子

1、使用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

还可以查询和查询存储在Prolog文件中的现有知识库。假设文件名“knowledge_base.pl”和Python在同一工作目录中运行,则按如下方式进行查询:

>>> from pyswip import Prolog

>>> prolog = Prolog()

>>> prolog.consult("knowledge_base.pl")

2、外部功能

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)")))

3、Pythonic界面(实验性)

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

Prolog.query的核心功能基于Nathan Denny的公共域prolog.py。

 

相关主题

在CentOS 8上安装Python 3和Python 2,及设置默认Python版本

精选文章
热门文章