【发布时间】:2016-08-12 15:50:15
【问题描述】:
我有以下程序:
%% 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,c)),换句话说,是嵌套术语而不是扁平术语。请参阅this answer 及其下方的 cmets。
标签: prolog unification