首页 > 解决方案 > Prolog,未知参数解决

问题描述

我对我的规则有疑问。如果 Var1 和 Var2 是两个给定列表中的第一个元素,它应该返回 true。

它在这里工作正常:

?- testpos([test1, test2, test3], [testA, testB, testC], test1, testA).
true.

?- testpos([test1, test2, test3], [testA, testB, testC], test1, testB).
false.

但我希望规则能够解决未知输入的问题。

例如(预期输出):

?- testpos([test1, test2, test3], [testA, testB, testC], Z, X).
Z = test1
X = testA
false.

我现在的代码:

testpos([X| _], [Y| _], Var1, Var2) :-
    X == Var1, Y == Var2.

解决了

我的错误是我使用 == 而不是 =

标签: variablesprolog

解决方案


你快到了

testpos([X| _], [Y| _], Var1, Var2) :-
    X = Var1, Y = Var2.

==/2当它的两个论点在没有进一步统一的情况下是等价的=/2时成功,而当它们是统一的并且论点被统一时 as 成功。

看看这个答案:Prolog 中 == 和 = 有什么区别?

你也可以写:

testpos([X| _], [Y| _], X, Y).

Prolog 进行统一以匹配子句,因此它们本质上是等价的。


推荐阅读