2016-08-12 3 views
0

У меня есть следующая программа:Weird объединение в Прологе

%% adjacent((Xs, Ys), (Xa, Ya)) - <Xa, Ya> is adjacent to <Xs, Ys>. 
adjacent((Xs, Ys), (Right, Ys)) :- Right is Xs + 1. 
adjacent((Xs, Ys), (Left, Ys)) :- Left is Xs - 1. 
adjacent((Xs, Ys), (Xs, Up)) :- Up is Ys + 1. 
adjacent((Xs, Ys), (Xs, Down)) :- Down is Ys - 1. 

Когда я делаю

?- adjacent((5, 6), (X, Y)). 

это дает мне

X = Y, Y = 6 ; 
X = 4, 
Y = 6 ; 
X = 5, 
Y = 7 ; 
X = Y, Y = 5. 

Что происходит?

+2

Не используйте «кортежи», это не то, что вы думаете. '(a, b)' на самом деле '',' (a, b)', что не так уж плохо, но '(a, b, c)' фактически '',' (a, ',' (b , в)), т. е. вложенный термин вместо плоского члена. См. [Этот ответ] (http://stackoverflow.com/a/36932359/1812457) и комментарии ниже. –

ответ

0

ОК, я понимаю, что я глуп. SWI-Prolog просто агрегировал значения переменных на выходе, когда они были одинаковыми для обоих ...

Смежные вопросы