首页 > 解决方案 > 为什么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 参数的想法全错了,或者您认为它与其余代码有关吗?

标签: if-statementprolog

解决方案


推荐阅读