有没有办法在 python(python 桥接序言)中打印它?

Is there any way to print it in python(python bridging on prolog)?

我正在尝试使用 pyswip 运行 来自 python 程序的序言查询。 假设我有这样的程序,

from pyswip import Prolog
p = Prolog()
p.retractall('rule1(_,_)')
p.retractall('rule2(_,_)')
p.retractall('rule3(_,_)')
p.assertz('rule2(X):- writeln(\'in rule2\': X)')
p.assertz('rule1(X,Y):- rule2(X), writeln(\'rule2 exectued\'),rule3(Y)')
p.assertz('rule3(Y):- writeln(\'in rule3\': Y)')
print(list(p.query('rule1(1,2)')))

现在我想要的是所有将在序言中打印的 writeln 规则,我希望将其打印在 python terminal.is 中,有什么方法可以做到吗?

对我来说,它的行为如下:

>>> print(list(p.query('rule1(1,2)')))
in rule2:1
rule2 exectued
in rule3:2
[{}]

您的 writeln 语句按预期执行,输出打印到 Python 终端。你的输出不同吗?你想让它与众不同吗?

编辑(见下面的评论): 当 Python 不是 运行 直接在终端中而是在 Jupyter notebook 或类似工具中时,Prolog输出可能会丢失。在这种情况下,Prolog 查询可以包装在 with_output_to(atom(PrologOutput), ...) 中,这将在原子(Python 字符串)中捕获 Prolog 代码的输出:

>>> print(list(p.query('with_output_to(atom(PrologOutput), rule1(1,2))')))
[{'PrologOutput': 'in rule2:1\nrule2 exectued\nin rule3:2\n'}]