pyswip允许在python程序中查询swi prolog。

pyswip的Python项目详细描述


PYSWIP

有什么新消息?

请参阅CHANGELOG

正在清理和重构此库。预计API会损坏,并且与以前的版本不兼容。

感谢所有的contributors。如果您以前为pyswip做过贡献,而您的名字没有出现在列表中,请let me know这样我可以添加您的名字。

简介

pyswip是一个python-swi prolog桥,允许在python程序中查询SWI-Prolog。 它具有一个(不完整的)swi-prolog外语接口,一个使prolog查询变得容易的实用程序类,以及一个 pythonic接口。

由于pyswip使用swi prolog作为共享库,使用cTypes访问它,因此不需要安装编译。

要求:

  • Python2.7或3.4及更高版本。
    • 当前不支持pypy。
  • swi prolog 7.2.x及更高版本。
  • libswipl作为共享库。这是大多数平台上的默认值。
  • 适用于Linux、Windows、MacOS和FreeBSD。应该在其他POSIX上工作。

安装

有关说明,请参见INSTALL

示例

使用prolog

frompyswipimportPrologprolog=Prolog()prolog.assertz("father(michael,john)")prolog.assertz("father(michael,gina)")list(prolog.query("father(michael,X)"))==[{'X':'john'},{'X':'gina'}]forsolninprolog.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")

外部功能

from__future__importprint_functionfrompyswipimportProlog,registerForeigndefhello(t):print("Hello,",t)hello.arity=1registerForeign(hello)prolog=Prolog()prolog.assertz("father(michael,john)")prolog.assertz("father(michael,gina)")print(list(prolog.query("father(michael,X), hello(X)")))

Python接口(实验性)

from__future__importprint_functionfrompyswipimportFunctor,Variable,Query,callassertz=Functor("assertz",1)father=Functor("father",2)call(assertz(father("michael","john")))call(assertz(father("michael","gina")))X=Variable()q=Query(father("michael",X))whileq.nextSolution():print("Hello,",X.value)q.closeQuery()# Outputs:#    Hello, john#    Hello, gina

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

救命啊!

联系人

使用或引用pyswip的项目/出版物

您有使用/提到pyswip的项目、视频或出版物吗?Please let me know或发送拉取请求。

书籍

出版物

视频

项目

博客文章

许可证

Copyright (c) 2007-2018 Yüce Tekol

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.

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java无法使用JSF访问托管bean方法   java是制作具有多值类型的HashMap的正确方法   javafx中TicTacToe的java更新UI   windows Java文件。getCanonicalFile()无法处理冒号“:”   java在一个布局屏幕中创建多个(26)按钮   java Android Studio:Gradle构建完成,有251个错误   我们如何在Java上为callfireapiclient编写单元/集成测试?   java无法将1715UTC转换为本地/gmt类型   具有已定义的数字序列的JAVA循环   Java程序正在netbeans中编译,但未在CMD中编译,包不存在   java Android构造函数和onCreate()之间有什么区别?   java配置弹性搜索结果评分   java LibGDX纹理是否可绘制?   java如何在Android中设置应用程序默认打开pdf   java是否有一种创造性的方法将多个参数传递给contentEquals()方法?   java在Android上存储Ed25519私钥