Prolog,未知参数解决

Prolog, unknown argument solving

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

在这里工作正常:

?- 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.

已解决

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

你快到了

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

==/2 当它的两个参数相等而无需进一步统一时成功,而 =/2 当它们可统一且参数统一时成功。

看看这个答案:What is the difference between == and = in Prolog?

你也可以这样写:

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

Prolog 统一匹配子句,所以它们本质上是等价的。