这是我的知识库:
a(b,c).
a(X,Y):-a(Y,X).
这是我的查询:a(c,b).
我正在使用 SWI-Prolog。我认为这个查询会导致程序打印“true”。但是,如果我按分号,它会打印“真”并继续打印真......直到永远。
为什么停不下来?
我的想法:首先,X 绑定到 b,Y 绑定到 c。然后,Prolog 测试 a(b,c) 并发现这是真的。因此,a(c,b) 也为真,SWI-Prolog 应该打印一次为真。但是,由于只要我一直按那个分号,它就会永远打印出来,这让我认为递归正在发生。这发生在哪里?帮助!
编辑:更具体地说,我的问题是为什么程序在每个“真”之后暂停并等待我按分号或另一个键而不是完成?如果我有两个谓词 human(socrates) 和 mortal(X):-humans(X),则对查询 mortal(socrates) 的响应将是一个“真”。(对不起,如果我没有在上面说清楚。)