Fix min/2 and max/2
?- X in 0..1, Y in 2..4, Z #= max(X,Y). clpz:(X in 0..1), clpz:(Z#=max(X,Y)), clpz:(Z in 2..4), clpz:(Z#>=Y), clpz:(Y in 2..4). % unexpected. ?- X in 0..1, Y in 2..4, Z #= max(Y,X). Y = Z, clpz:(X in 0..1), clpz:(Y in 2..4).
This commit is contained in:
@@ -5398,7 +5398,7 @@ run_propagator(pmax(X,Y,Z), MState) -->
|
||||
; { fd_get(Z, ZD, ZPs) } ->
|
||||
{ fd_get(X, _, XInf, XSup, _),
|
||||
fd_get(Y, _, YInf, YSup, _) },
|
||||
( { YInf cis_gt YSup } -> kill(MState), queue_goal(Z = Y)
|
||||
( { YInf cis_gt XSup } -> kill(MState), queue_goal(Z = Y)
|
||||
; { YSup cis_lt XInf } -> kill(MState), queue_goal(Z = X)
|
||||
; { n(M) cis max(XSup, YSup) } ->
|
||||
{ domain_remove_greater_than(ZD, M, ZD1) },
|
||||
@@ -5433,7 +5433,7 @@ run_propagator(pmin(X,Y,Z), MState) -->
|
||||
; { fd_get(Z, ZD, ZPs) } ->
|
||||
{ fd_get(X, _, XInf, XSup, _),
|
||||
fd_get(Y, _, YInf, YSup, _) },
|
||||
( { YSup cis_lt YInf } -> kill(MState), Z = Y
|
||||
( { YSup cis_lt XInf } -> kill(MState), Z = Y
|
||||
; { YInf cis_gt XSup } -> kill(MState), Z = X
|
||||
; { n(M) cis min(XInf, YInf) } ->
|
||||
{ domain_remove_smaller_than(ZD, M, ZD1) },
|
||||
|
||||
Reference in New Issue
Block a user