如何显示的模式匹配的目标在SWI-Prolog的从shell调用的结果?(How do I show

2019-09-18 16:11发布

我想知道从外壳调用它,当一个人如何会从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是正确没有找到匹配的事实。

我的问题是:我如何获得的所有比赛进行打印,这样从壳我可以看到我在Prolog的环境时,像输出? 例如

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

我不认为--quiet是问题。 它只是抑制序言启动消息。 见SWI-Prolog的命令行选项

Answer 1:

自己打印出来,例如使用:

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


文章来源: How do I show the results of pattern-matching goals in SWI-Prolog from a shell invocation?