Python:有没有办法让 swipl 查询的结果为 true 而不是 {}?

Python: Is there a way a swipl query results in value true not {}?

要在 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,或者在这种情况下查询函数的期望值是 {}?

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

?- dad(X).
X = peter.

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

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