我真的不明白为什么Prolog只会在member / 2谓词之后打印一个空格。以下是我的控制台中的文字。
?- member(1, [1, 2, 3]).
true .
?- string("why").
true.
这真让我疯狂!
答案 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.
表示没有进一步的解决方案。