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