是否可以延迟赋值操作

Is it possible to delay an assignment operation

我有一个小 script/code,我想施加一些 active 约束。在下面显示的代码中,我有 P[I,J] #= E 并且在下一行 Result[I,E] #= J 但这是抛出一个 instantiation error 因为 E 没有实例化。

对于这些约束,我需要知道 P[I,J] 的值是什么,所以如果我将其写为 E is P[I,J] 那么当然我不会得到 instantiation error(incase i suspend next two constraints with suspend, e.g suspend:(P[I,J] #= E) 但它会影响约束的活动性,因为 assignment 不会被延迟,而只有约束会被延迟。是否有任何替代方法来施加此约束?

multifor([I,J] ,[1,1],[N,N]),param(P,ResultFirst),foreach(E,_) do
            E #:: 1..9,
            P[I,J] #= E,
           (ResultFirst[I,E] #= J),

如果能按照您的方式编写它会很好,但不幸的是目前不支持(假设您使用的是 ECLiPSe). If the array index E is uninstantiated at constraint setup time, you have to use an element/3 约束。因此,而不是

ResultFirst[I,E] #= J

element(E, ResultFirst[I], J)