variables - 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.
解决了
我的错误是我使用 == 而不是 =
解决方案
你快到了
testpos([X| _], [Y| _], Var1, Var2) :-
X = Var1, Y = Var2.
==/2
当它的两个论点在没有进一步统一的情况下是等价的=/2
时成功,而当它们是统一的并且论点被统一时 as 成功。
看看这个答案:Prolog 中 == 和 = 有什么区别?
你也可以写:
testpos([X| _], [Y| _], X, Y).
Prolog 进行统一以匹配子句,因此它们本质上是等价的。
推荐阅读
- powershell - 解析信息并仅返回匹配的信息
- vue.js - 排除 json 文件捆绑在 Vue 中
- python - 从地址 IMAP Python 中获取所有未见消息的正文
- spring-boot - 在weblogic中配置spring-boot应用部署的端口
- python-3.x - 我应该如何使用 mode.predict_generator 来评估混淆矩阵中的模型性能?
- r - 按超过 2 列的因子折叠数据框
- java - 如何在不移动按钮的情况下在 javafx 中添加文本框
- c++ - “架构 x86_64 的未定义符号”
- javascript - 函数在 Promise.all(reduce(acc, item) => {})) 函数中丢失上下文
- python - 为什么所有双下划线变量都在类方法中被破坏