【问题标题】: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,或者在这种情况下是查询函数的预期值 {}?

【问题讨论】:

标签: python prolog boolean rules


【解决方案1】:

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

?- dad(X).
X = peter.

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-28
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2021-04-07
    • 2019-02-27
    相关资源
    最近更新 更多