Python:pyswip 输出返回 Atom 和 Functor

2024-01-25

基于一些较旧的post https://stackoverflow.com/questions/63890053/prolog-define-logical-operator-in-prolog-as-placeholder-for-other-operator,我有一些序言程序,它指定了命题。我们称之为“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 为此目的提供的库是 pyswip。

我现在这个库的问题是 swipl 函数交叉点/3 https://www.swi-prolog.org/pldoc/man?predicate=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.10

pip install pyswip

在版本 0.2.11 中github页面 https://github.com/yuce/pyswip这个问题应该得到解决。您可以通过命令安装0.2.11:

pip install git+https://github.com/yuce/pyswip@master#egg=pyswip

我的输出现在是:

[{'A': 'p', 'B': 'q', 'Aim': ['p', '→(p, q)']}]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python:pyswip 输出返回 Atom 和 Functor 的相关文章

随机推荐

  • Android编程打开DataUsage设置页面

    在 Android 5 0 中 移动数据设置可在数据使用设置中使用 我想在android中打开数据使用设置页面 但我没有找到任何打开它的意图 为什么要打开数据使用设置页面 你尝试过这种方法吗 final Intent intent new
  • MIN 和 MAX 宏的 Swift 等效项

    在 C Objective C 中 可以使用 MIN 和 MAX 宏找到两个数字之间的最小值和最大值 Swift 不支持宏 并且语言 基础库中似乎没有等效的宏 是否应该采用自定义解决方案 也许基于这样的泛型one http www cplu
  • 未捕获的语法错误:意外的标记 e

    I am getting Uncaught Syntax Error newly the only addition is sending retrieve json data from server to client How to in
  • 通过 Bash Shell 脚本从 url 列表中提取父域名

    我有一个像这样的网址列表 http noto zrobimystrone pl pucenter images NGdocs http visionwebmkt com unsubscribe php M 879552 C b744d324
  • 列出给定库模块中的谓词

    有没有办法列出 SICStus Prolog 给定库模块中定义的所有谓词 例如如果我加载列表模块 use module library lists 我可以从提示符中运行另一个谓词来告诉我刚刚导入了哪些谓词吗 这适用于 SWI Prolog
  • 哪种 pyspark 抽象适合我的大型矩阵乘法?

    我想执行大型矩阵乘法 C A B T然后通过应用严格的阈值来过滤 C 收集形式为 行索引 列索引 值 的列表 A 和 B 很稀疏 条目大多为零 它们最初表示为稀疏 scipy csr 矩阵 矩阵的大小 当它们是密集格式时 答 9G 900
  • 有关构建 RDBMS 的资源 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在考虑实施 RDBMS 有没有关于数据库内部工作原理以及在开始构建自己的数据库时需要了解哪些内容的
  • JavaScript 选择/范围框架

    我一直在使用选择 范围对象 并且由于浏览器之间对于特定选择 范围内容 甚至超过 DOM 存在大量不一致 我想知道是否有一个框架可以帮助我解决这些问题 我编写了一个新的范围 选择库 名为Rangy http code google com p
  • 将字符串转换为带时区的日期

    我有一个格式为 yyyy MM dd hh mm a 的字符串 我可以单独获取时区对象 其中上面的字符串代表日期 我想将其转换为以下格式 yyyy MM dd HH mm ss Z 我怎样才能做到这一点 您可以使用简单日期格式 http d
  • AVAudioSession:某些蓝牙设备在我的应用程序上无法正常工作

    我正在使用 AVAudioSession 开发一个快速的音频 视频和文本聊天 iOS 应用程序 每当我选择使用某些蓝牙设备时 设备上播放的声音不是应用程序音频流 每当发送 接收消息时 它们仅播放文本聊天库发送的系统声音 并非所有蓝牙设备都会
  • null 参数的 IllegalArgumentException 或 NullPointerException? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我有一个简单的属性设置方法null不适合此特定属性 我一直在这种情况下左右为难 我应该扔一个吗 IllegalArgumentException
  • 如何从 Oreo 的内部存储中打开 PDF 文件?

    我尝试在 Oreo 中打开 PDF 文件 但打不开 我没有收到任何错误 有什么问题吗 PDF 文件无法打开 仅显示黑屏 在 logcat 中没有显示错误 怎么了 我该如何解决这个问题 我引用了很多链接但没有得到解决方案 我也尝试了很多代码但
  • 对于简单的类型不匹配,出现错误“未为 `std::string::String` 实现特征 `std::ops::FnMut<(char,)>`”[重复]

    这个问题在这里已经有答案了 let mystring format the quick brown fox assert mystring ends with mystring Error the trait std ops FnMut l
  • 删除“NUL”字符

    我的记事本 中有这样的字符 当我尝试复制整行时 我实际上正在复制所有内容 直到 NUL File 1 我想做的就是替换那些空的 什么都没有 这样我就可以复制我的整行 也许有任何关键字可以告诉记事本 或任何其他可能有帮助的程序 替换这些字符
  • 如何减少 CUDA 同步延迟/延迟

    这个问题与使用cuda流运行多个内核有关 CUDA中有很多同步命令 cudaStream同步 Cuda设备同步 cuda线程同步 还有 cudaStreamQuery 来检查流是否为空 我注意到在使用探查器时 这些同步命令会给程序带来很大的
  • Android 中的聊天应用程序,以便发送者和接收者消息应该位于不同的一侧

    protected void onPostExecute ArrayList
  • 如何使用资产管道在邮件程序中拥有样式表的绝对路径?

    我的邮件模板中的视图助手为我提供了样式表和图像的相对 URL 当然 例如 如果我在 Gmail 中查看电子邮件 则此方法将不起作用 In apps views layouts mailer html erb 呈现为 a href http
  • 调试时 GCC 中的自定义 C++ 分配器太慢。有解决办法吗?

    我正在努力解决自定义分配器的性能问题 我的问题是关于调试版本 通常情况下 如果只有一点点下降 我并不介意 但目前我正在以 4fps 播放某些内容 而如果没有自定义分配器 则播放速度为 60fps 并且可能会更快 这使得软件开发变得更加困难
  • 在字符串末尾增加整数

    我有一个很强的 芝加哥 伊利诺伊州 我想在它的末尾添加一个 所以它将是 芝加哥 伊利诺伊州 注意 它也可能是芝加哥 伊利诺伊州 10 我希望它去芝加哥 伊利诺伊州 11 所以我不能做 substr 有什么建议的解决方案吗 一个非常简单的问题
  • Python:pyswip 输出返回 Atom 和 Functor

    基于一些较旧的post https stackoverflow com questions 63890053 prolog define logical operator in prolog as placeholder for other