我在莫扎特中使用"if语句“有问题。程序启动,但只给出的结果是: 1#_。我想知道为什么现在起作用了。
declare PSO
proc{PSO W}
X1 X2 X3 X4
Y1 Y2 Y3 Y4
in
X1::1#6
X2::1#6
X3::1#6
X4::1#6
Y1::1#6
Y2::1#6
Y3::1#6
Y4::1#6
if X1 > 1 then Y1 =: 2 else Y2=:3
end
W=w(x1:X1 y1:Y1 x2:X2 y2:Y2 x3:X3 y3:Y3 x4:X4 y4:Y4)
{FD.distribute ff W}
end
{ExploreOne PSO}发布于 2015-03-29 18:22:37
问题是:您正在尝试评估X > 1,尽管X目前还没有完全确定。所以这个过程在这一点上就被阻止了。
您可以在distribute之后移动违规语句。
W=w(x1:X1 y1:Y1 x2:X2 y2:Y2 x3:X3 y3:Y3 x4:X4 y4:Y4)
{FD.distribute ff W}
if X1 > 1 then Y1 =: 2 else Y2=:3
end在distribute之后,所有变量都有具体的值。
或者用逻辑编程结构替换if-else语句:
choice
X1 >: 1
Y1 =: 2
[] X1 =<: 1
Y2 =: 3
end后者通常在约束编程问题上更有效。
https://stackoverflow.com/questions/29331073
复制相似问题