为什么Prolog谓词成员/ 2在输出中打印出额外的空格?

时间:2017-11-30 15:28:44

标签: prolog swi-prolog prolog-toplevel

我真的不明白为什么Prolog只会在member / 2谓词之后打印一个空格。以下是我的控制台中的文字。

?- member(1, [1, 2, 3]).
true .

?- string("why").
true.

这真让我疯狂!

1 个答案:

答案 0 :(得分:4)

这是一个预期功能,表明您实际上已在顶层中止了查询。让我们考虑一个你最初得到的更明确的案例:

?- member(1,[1,1]).
true 

在这里,Prolog确认这是真的,但仍在等待您的回复。如果您通过 SPACE ; 提出更多要求,您将获得下一个解决方案:

?- member(1,[1,1]).
true ;
true.

但是,如果您点击 Return ,Prolog将中止您的查询。要在屏幕上显示此内容,请插入额外的空格:

?- member(1,[1,1]).
true .

传统上,许多实现从未在地面查询中询问替代方案 - 当查询本身不包含任何变量时。这个"优化"经常隐藏意外的循环。

在您的示例中,Prolog不知道是否可以进一步回答,因此它会提示当下。如果你再要求更多,你会得到:

?- member(1, [1, 2, 3]).
true ;
false.

表示没有进一步的解决方案。