Python:有没有办法让 swipl 查询产生值 true 而不是 ?

Posted

技术标签:

【中文标题】Python:有没有办法让 swipl 查询产生值 true 而不是 ?【英文标题】:Python: Is there a way a swipl query results in value true not ?Python:有没有办法让 swipl 查询产生值 true 而不是 ? 【发布时间】:2022-01-21 15:24:19 【问题描述】:

要在 python 中调用 prolog 程序,有 pyswip 库。

如果给定值的规则为真或假,是否有可能获取信息。如果我从 swipl 调用控制台中的一个事实,我会得到例如

?- dad(a).
true.

如果我在 python 中尝试同样的方法:

从 pyswip 导入 Prolog, registerForeign

from pyswip import Prolog
prolog = Prolog()

prolog.assertz("dad(peter)")

for res in prolog.query("dad(peter)."):
    print(res)

它只给我输出:

不是真的。此时我是否可以调用另一个函数来获取 True 或 False,或者在这种情况下是查询函数的预期值 ?

【问题讨论】:

对于 SWI-Prolog 到 Python,你应该看看 SWI Prolog Machine Query Interface and Python Integration 【参考方案1】:

从 Prolog 的角度来看, 是预期的结果。当 Prolog 查询成功时,Prolog 打印一组答案替换:

?- dad(X).
X = peter.

作为一种特殊情况,如果查询中没有绑定任何变量,Prolog 需要指出 (a) 查询成功,并且 (b) 没有绑定任何变量。传统上,这是通过打印yestrue 之类的内容来完成的。但这只是“成功,零替换”的简写。而且这只是一个打印约定,而不是任何真正意义上的“返回值”。 Prolog 没有返回值。

如果您使用使用语言的集合类型来表示成功和答案替换集的外国库,那么将成功和零替换表示为零元素集是有意义的,即

【讨论】:

以上是关于Python:有没有办法让 swipl 查询产生值 true 而不是 ?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法让 C++ 结构值初始化所有 POD 成员变量?

有没有办法在值增加时让引导进度条动画,但在重置为 0 时没有?

有没有办法使用 scikit 或任何其他 python 包只获取单词的 IDF 值?

猫鼬查询具有不同值的相同字段

有没有办法让我的 API 只能由我的 node.js 服务器查询?

如何在SQL中获取常量值