跳转到主要内容

用于生成prolog术语的简单Python库

项目描述

prologterms - 构建prolog术语的Python库

示例

from prologterms import TermGenerator, PrologRenderer, Var

X = Var('X')
P = TermGenerator()
term = P.member(X, [1, 2, 3])
r = PrologRenderer()
print(r.render(term))

写入

member(X, [1, 2, 3])

所有prolog转义约定都自动处理。

请参阅Jupyter笔记本

规则

Python中的“<”操作符被重载,表示与prolog中的“:-”相同。这意味着可以按以下方式创建规则对象

P.ancestor(X,Y) <= (P.parent(X,Z), P.ancestor(Z,Y))

可以使用规则构造函数更明确地完成此操作

from prologterms import TermGenerator, PrologRenderer, Var, Rule

X = Var('X')
Y = Var('Y')
Z = Var('Z')
P = TermGenerator()
rule = Rule(P.ancestor(X,Y), (P.parent(X,Z), P.ancestor(Z,Y))

用法

此模块本身用处不大。它旨在用于生成可以输入到prolog执行引擎中的prolog程序。

  • 将prolog程序和查询写入文件,然后使用swi-prolog等引擎加载这些文件

  • 通过网络服务,例如通过pengines

Pengines

(注意:需要最新的pengines,它可能不在pypi上)

其中一个预期应用是pengines

from pengines.Builder import PengineBuilder
from pengines.Pengine import Pengine
from prologterms import TermGenerator, PrologRenderer, Program, Var

P = TermGenerator()
X = Var('X')
Y = Var('Y')
Z = Var('Z')
R = PrologRenderer()

p = Program(
    P.ancestor(X,Y) <= (P.parent(X,Z), P.ancestor(Z,Y)),
    P.ancestor(X,Y) <= P.parent(X,Y),
    P.parent('a','b'),
    P.parent('b','c'),
    P.parent('c','d')
)

q = P.ancestor(X,Y)

factory = PengineBuilder(urlserver="http://localhost:4242",
                         srctext=R.render(p),
                         ask=R.render(q))
pengine = Pengine(builder=factory, debug=True)
while pengine.currentQuery.hasMore:
    pengine.doNext(pengine.currentQuery)
for p in pengine.currentQuery.availProofs:
    print('{} <- {}'.format(p[X.name], p[Y.name]))

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

prologterms-0.0.6.tar.gz (3.9 kB 查看哈希值)

上传时间 源代码

构建分发

prologterms-0.0.6-py3-none-any.whl (4.0 kB 查看哈希值)

上传时间 Python 3

由以下组织支持