Prolog 为什么';为什么不停下来?

Prolog 为什么';为什么不停下来?,prolog,Prolog,如果我有以下规则: test(X, Y, abc) :- X=='true' ; Y =='true'. 我做了一个查询,比如:test(true,true,X)。 为什么它会输出X=abc?两次 | ?- test(true, true, X). X = abc ? n X = abc ? n no 它不应该只“回答”一次吗 它不应该发现X==true,然后停止,因为如果只有一个条件为true,那么整个条件为true吗?之所以发生这种情况,是因为Prolog将尝试找到所有可能的解决方案,并

如果我有以下规则:

test(X, Y, abc) :- X=='true' ; Y =='true'.
我做了一个查询,比如:
test(true,true,X)。

为什么它会输出
X=abc?
两次

| ?- test(true, true, X).
X = abc ? n
X = abc ? n
no
它不应该只“回答”一次吗


它不应该发现X==true,然后停止,因为如果只有一个条件为true,那么整个条件为true吗?

之所以发生这种情况,是因为Prolog将尝试找到所有可能的解决方案,并将遵循所有可能的路径来执行此操作。你给出了两条通向真实性的可能路径,因此它将遵循这两条路径并向你显示两个结果。

test(true,true,abc)
成功两次,因为你的规则说如果
X==true
Y==true
则为真。因此,它以两种不同的方式取得了成功。Prolog将向您展示所有的解决方案。。。。您可以随时编写
true
来代替
'true'