如何从shell调用中显示SWI-Prolog中模式匹配目标的结果?

时间:2012-06-27 20:38:06

标签: shell prolog swi-prolog

我想知道从shell调用它时如何从SWI-Prolog输出。

假设我有一个简单的知识库,kb.pl

dad(elvis, lisaMarie).
dad(john, julian).

我可以从shell调用SWI-Prolog:

$ swipl --quiet -s kb.pl -t listing

我的知识库列表打印到stdout。如果我试试这个:

$ swipl --quiet -s kb.pl -t "dad(elvis, X)"
$ echo $?
0

没有打印输出,但我知道它找到匹配,因为当我查询返回代码时我得到零。类似地:

$ swipl --quiet -s kb.pl -t "dad(morrisey, X)"
$ echo $?
1

显示Prolog正确无法找到匹配的事实。

我的问题是:如何打印所有匹配项,以便从shell中我可以看到输出,就像我在Prolog环境中一样? E.g。

$ swipl --quiet -s kb.pl -t "dad(elvis,X)" --magicdust
X = lisaMarie.

我认为--quiet不是问题所在。它只是压制prolog启动消息。见SWI-Prolog Command-Line Options

1 个答案:

答案 0 :(得分:5)

自己打印,例如:

$ swipl -q -s kb.pl -t "dad(elvis,X), writeln(X), false"