pyswip
v0.3.2
请参阅更改日志。
如果您安装了 SWI-Prolog,则只需:
pip install -U pyswip
请参阅入门了解详细说明。
PySwip 是一个 Python-Prolog 接口,可在 Python 程序中查询 SWI-Prolog。它具有 SWI-Prolog 外语界面、一个可以轻松使用 Prolog 进行查询的实用程序类以及一个 Pythonic 界面。
由于 PySwip 使用 SWI-Prolog 作为共享库并使用 ctypes 来访问它,因此不需要安装编译。
PySwip 由 PySwip 社区为您带来。感谢所有贡献者。
from pyswip import 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 . consult ( "knowledge_base.pl" )
from pyswip import Prolog , registerForeign
def hello ( t ):
print ( "Hello," , t )
hello . arity = 1
registerForeign ( hello )
Prolog . assertz ( "father(michael,john)" )
Prolog . assertz ( "father(michael,gina)" )
print ( list ( Prolog . query ( "father(michael,X), hello(X)" )))
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。
多年来,PySwip 被用于科学文章、论文和学生项目。前往 PySwip 社区获取更多信息和社区链接。
您有使用/提及 PySwip 的项目、视频或出版物吗?提出问题或发送拉取请求。
如果您想在 LaTeX 文档中引用 PySwip,可以使用提供的 BibTeX 文件。您还可以使用以下信息来参考 PySwip:
PySwip 根据 MIT 许可证获得许可。