Я сбит с толку следующими результатами.Я использую 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]].