0

我有一个小脚本/代码,我想施加一些active限制。在下面显示的代码中,我P[I,J] #= E在下一行中有 andResult[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),
4

1 回答 1

1

如果可以按照您的方式编写它会很好,但不幸的是,目前不支持此功能(假设您使用的是ECLiPSe)。如果在约束设置时数组索引E未实例化,则必须使用element/3约束。所以,而不是

ResultFirst[I,E] #= J

element(E, ResultFirst[I], J)
于 2019-05-25T22:48:32.857 回答