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 统一匹配子句,所以它们本质上是等价的。
我对我的规则有疑问。如果 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 统一匹配子句,所以它们本质上是等价的。