eplex库中是否对模运算有任何明确的支持

时间:2019-06-03 02:49:21

标签: prolog constraints eclipse-clp

我正在使用eplexic库并尝试解决问题。我看到eplexicaddition,multiplicationsubtraction提供了明确的支持,但没有为modulodivision提供支持。

更准确地说,我有以下代码:

    FirstResult #=  (Result[I] mod Val), % Here it gives error because Result[I] is not instantiated.
    NewVal is Val+1,
    SecondResult #= (Result[I] mod NewVal)

mod要求其两个自变量为基,但是Result[I]未被实例化,而是具有值的范围。因此,我的问题是如何延迟涉及mod操作的约束。

1 个答案:

答案 0 :(得分:1)

您通常可以重新配制

R #= X mod Y

0 #=< R, R #=< Y-1,      %  R is between 0 and Y-1
X #= _*Y + R,            %  X is some multiple of Y, plus a remainder R

这假定您正在使用library(ic),并且对带有负参数的行为没有特殊要求。

对于使用MILP求解器的library(eplex),您可以执行几乎相同的操作(只要Y是一个整数参数),但是您必须更加明确地了解完整性:

0 $=< R, R $=< Y-1,
integers([K,R]),
X $= K*Y + R,