【问题标题】:Weird unification in PrologProlog中奇怪的统一
【发布时间】: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


【解决方案1】:

好吧,我意识到我很愚蠢。当两者相同时,SWI-Prolog 只是在输出中汇总变量的值...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    相关资源
    最近更新 更多