我对以下结果感到困惑。我正在使用 SWI-Prolog。
?- bagof(Q, (Q=A, (A=[a,_] ; A=[_,b])), X).
A = [_G16898, b],
X = [[_G16898, b]] ;
A = [a, _G16892],
X = [[a, _G16892]].
注意[a,_]
和[_,b]
不统一产生答案A = [a,b], X=[[a,b],[a,b]]
。
现在,让我们尝试使用算术约束:
?- bagof(Q, (Q=A, (A in 1..5 ; A in 3..8)), X).
X = [A, A],
A in 3..5.
奇怪的是,这一次算术约束被放在一起,但没有答案A in 1..5, X=[A]
和A in 3..8, X=[A]
。
现在让我们以另一种方式尝试:
?- bagof(Q, (Q=A, ((1 #=< A, A #=< 5) ; (3 #=< A, A #=< 8))), X).
X = [A],
A in 3..5 ;
X = [A],
A in 3..5.
算术约束像以前一样组合在一起,但我们有两个答案而不是一个。
如何解释这一切?
编辑:一些更奇怪的结果。比较一下:
?- A=[_,_], bagof(Q, K1^K2^(Q=A, (A=[a,K1] ; A=[K2,b])), X).
A = [_G16886, b],
X = [[_G16886, b]] ;
A = [a, _G16889],
X = [[a, _G16889]].
有了这个:
?- A=[a,b], bagof(Q, K1^K2^(Q=A, (A=[a,K1] ; A=[K2,b])), X).
A = [a, b],
X = [[a, b], [a, b]].