【问题标题】:Difference between X\=Y and dif(X,Y)X\=Y 和 dif(X,Y) 的区别
【发布时间】:2013-05-15 08:19:51
【问题描述】:

这有什么区别:

X \= Y

还有这段代码:

dif(X, Y)

我认为它们的行为应该相同,但事实并非如此。示例如下:

n_puta(L, N, X) :- nputa(L, N, 0, X).
nputa([], N, C, _) :- N = C.
nputa([G|R], N, C, X) :- G = X, nputa(R, N, Y, X), C is Y - 1.
nputa([G|R], N, C, X) :- dif(G,X), nputa(R, N, C, X).

这里有一些调用:

?- n_puta([a,a,b,b,b], 2, X).
X = a ;
false.

?- n_puta([a,a,b,a,b,b], 3, X).
X = a ;
X = b ;
false.

X 应该是在列表 L 中恰好出现 N 次的原子。如果我将 dif(G, X) 替换为 G \= X,我不会得到预期的结果。有人能告诉我这两个运营商有什么区别吗?除了dif(G, X),我还能用别的吗?

此示例在 SWI-Prolog 中完美运行,但在 Amzi 中不起作用!序言。

【问题讨论】:

标签: prolog prolog-dif


【解决方案1】:

dif/2(\=)/2 是相同的,只要它们的论点是接地的。但只有dif/2 是一个纯关系,它也适用于变量并且可以在所有方向上使用。您的示例清楚地表明您应该在这种情况下使用dif/2,因为您不仅使用谓词进行测试,还使用谓词生成解决方案。使用最广泛的 Prolog 系统都提供dif/2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    相关资源
    最近更新 更多