Непонимание цепочки / 2? - PullRequest
0 голосов
/ 28 июня 2018

Если у меня есть (с загруженным clpfd):

test1(Ps):-
    permutation(Ps,[(a,1,1),(b,2,2),(c,3,1),(d,4,2)]), 
    Ps =[(L1,W1,X1),(L2,W2,X2),(L3,W3,Y1),(L4,W4,Y2)], 
    chain([W1,W2,W3,W4],#<).

И запрос:

?-test1(P).
P = [(a,1,1), (b,2,2), (c,3,1), (d,4,2)]
false

Который дает один ответ, как я ожидаю, но с:

test2(Ps):-
    permutation(Ps,[(a,1,1),(b,2,2),(c,3,1),(d,4,2)]), 
    Ps =[(L1,W1,X1),(L2,W2,X2),(L3,W3,Y1),(L4,W4,Y2)], 
    chain([X1,X2],#<).

Запрос:

?-test2(P):-
P = [(a,1,1), (b,2,2), (c,3,1), (d,4,2)]
P = [(a,1,1), (b,2,2), (d,4,2), (c,3,1)]
P = [(a,1,1), (d,4,2), (b,2,2), (c,3,1)]
P = [(a,1,1), (d,4,2), (c,3,1), (b,2,2)]
P = [(c,3,1), (b,2,2), (a,1,1), (d,4,2)]
P = [(c,3,1), (d,4,2), (a,1,1), (b,2,2)]
P = [(c,3,1), (b,2,2), (d,4,2), (a,1,1)]
P = [(c,3,1), (d,4,2), (b,2,2), (a,1,1)]
false

Я не ожидаю таких ответов, как:

P = [(c,3,1), (b,2,2), (d,4,2), (a,1,1)]
P = [(c,3,1), (d,4,2), (b,2,2), (a,1,1)]

Где условия с как после условий с бс. Что я недопонимаю?

1 Ответ

0 голосов
/ 28 июня 2018

Теперь я вижу, что я делаю неправильно.

Как ответы:

P = [(c,3,1), (b,2,2), (d,4,2), (a,1,1)]
P = [(c,3,1), (d,4,2), (b,2,2), (a,1,1)]

Очевидно, что в третьем аргументе первых двух элементов есть 1 и 2, поэтому они соответствуют цепочечному ограничению.

...