【问题标题】:Prolog, unknown argument solvingProlog,未知参数解决
【发布时间】:2021-11-17 15:35:50
【问题描述】:

我对我的规则有疑问。如果 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.

已解决

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

【问题讨论】:

    标签: variables prolog


    【解决方案1】:

    你快到了

    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 统一匹配子句,所以它们本质上是等价的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-05
      相关资源
      最近更新 更多