Можно ли отложить операцию присваивания? - PullRequest
0 голосов
/ 25 мая 2019

У меня есть небольшой скрипт / код, и я хочу наложить некоторые ограничения 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),

1 Ответ

1 голос
/ 26 мая 2019

Было бы неплохо, если бы вы могли написать это так, как вы это сделали, но, к сожалению, в настоящее время это не поддерживается (если вы используете ECLiPSe ).Если индекс массива E не создан во время установки ограничения, необходимо использовать ограничение element / 3 .Итак, вместо

ResultFirst[I,E] #= J

пишите

element(E, ResultFirst[I], J)
...