if-statement - 为什么K不保持它的价值?
问题描述
我必须让这个功能正常工作。目标是每次出现所有三个连接时都增加 K(对于 i=1, 2, 3 表示“con(H, Li)”;这些是预先存在的参数)。
ismember([], L1, L2, L3, 0, K).
ismember([H|T], L1, L2, L3, E, K):-
ismember(T, L1, L2, L3, E, K),
((con(H, L1), con(H, L2), con(H, L3)) -> K is E + 1 ); K is E.
现在我尝试运行代码,con(x, y) 的第一次迭代工作正常(所有三个连接都存在,所以当我使用跟踪时,K 似乎取值 1)。然而,在下一次迭代中,第一个连接不存在,这在我看来意味着代码将跳过中间部分并直接转到“K 是 E”。情况并非如此,当我跟踪它时出现两个内存插槽值:“_8230 是 _9204”而不是“K 是 E”(为了示例,我放置了两个随机内存地址)。为什么 Prolog 会这样做?我是否对 Prolog 中的 if 参数的想法全错了,或者您认为它与其余代码有关吗?
解决方案
推荐阅读
- xamarin - 如何实现 SearchBar 方法以从 Xamarin 表单中的类中搜索多个元素的关键字?
- javascript - 为什么我插入成功但数据库不显示插入的数据
- python - 回文问题使用 lambda 和 key
- c# - 解决方案中的对象名称冲突
- symfony - 简单的管理条件字段
- c - C中两个复数的除法
- excel - 将公式应用于列然后获取平均值
- apache-superset - 在 Apache Superset 中调整丰富的工具提示
- java - jakarta / javax 命名空间下的 Weld 和 Undertow
- python - 在数据框中选择值大于分类平均值的行