Python: pyswip output returns Atom and Functor(Python:pyswp输出返回Atom和Functor)
本文介绍了Python:pyswp输出返回Atom和Functor的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
基于一些较早的post,我有一些PROLOG程序,它指定命题。让我们称其为";logic.pl";
:-op(800, fx, ¬).
:-op(801, xfy, ∧).
:-op(802, xfy, ∨).
:-op(803, xfy, →).
:-op(804, xfy, ↔).
:-op(800, xfy, #).
m_Proposition_Binary_x_y(X ∨ Y, X, Y).
m_Proposition_Binary_x_y(X ∧ Y, X, Y).
m_Proposition_Binary_x_y(X → Y, X, Y).
m_Proposition_Binary_x_y(X ↔ Y, X, Y).
m_Proposition(X) :-
m_Proposition_Atom(X).
m_Proposition(Binary) :-
m_Proposition_Binary_x_y(Binary, X, Y),
m_Proposition(X),
m_Proposition(Y).
m_Proposition(¬ X) :-
m_Proposition(X).
m_Proposition_Atom(p).
m_Proposition_Atom(q).
我现在的目标是基于python程序处理一些Prolog函数。Python为此提供的库是pyswp。
这个库现在的问题是swpl函数intersection/3。如果我运行例如此函数
intersection([A,(A→B)], [p, (p→q)], Aim).
从SWI-Prolog手动获取所需的输出:
A = p,
B = q,
Aim = [p, p→q].
但在python代码中:
from pyswip import Prolog
prolog = Prolog()
prolog.consult("logic.pl")
for res in prolog.query("intersection([A,(A→B)], [p, (p→q)], Aim)."):
print(res)
我的输出是:
{'A': 'p', 'B': 'q', 'Aim': [Atom('331781'), Functor(8343821,2,p,q)]}
我现在的问题是,原因是什么:
'Aim': [Atom('331781'), Functor(8343821,2,p,q)]
是否有办法将其转换为我的预期输出?
Aim = [p, p→q]
推荐答案
我只是找到了一些答案。我刚刚使用
安装了最新的稳定版本0.2.10pip install pyswip
在github-page版本0.2.11中,此问题应得到解决。您可以通过以下命令安装0.2.11:
pip install git+https://github.com/yuce/pyswip@master#egg=pyswip
我现在的输出是:
[{'A': 'p', 'B': 'q', 'Aim': ['p', '→(p, q)']}]
这篇关于Python:pyswp输出返回Atom和Functor的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:Python:pyswp输出返回Atom和Functor


猜你喜欢
- python-m http.server 443--使用SSL? 2022-01-01
- padding='same' 转换为 PyTorch padding=# 2022-01-01
- 如何将一个类的函数分成多个文件? 2022-01-01
- 沿轴计算直方图 2022-01-01
- 分析异常:路径不存在:dbfs:/databricks/python/lib/python3.7/site-packages/sampleFolder/data; 2022-01-01
- 如何在 Python 的元组列表中对每个元组中的第一个值求和? 2022-01-01
- pytorch 中的自适应池是如何工作的? 2022-07-12
- 如何在 python3 中将 OrderedDict 转换为常规字典 2022-01-01
- python check_output 失败,退出状态为 1,但 Popen 适用于相同的命令 2022-01-01
- 使用Heroku上托管的Selenium登录Instagram时,找不到元素';用户名'; 2022-01-01