A jegyzetben a 107. oldalon szerepel a következő példa, amely a #=<
korlát egy megvalósítását mutatja.
% X #=< Y, globális korlátként megvalósítva
lseq(X, Y) :-
fd_global(lseq(X,Y), void, [min(X),max(Y)]).
:- multifile clpfd:dispatch_global/4.
:- discontiguous clpfd:dispatch_global/4.
clpfd:dispatch_global(lseq(X,Y), St, St, Actions) :-
dispatch_lseq(X, Y, Actions).
dispatch_lseq(X, Y, Actions) :-
fd_min(X, MinX), fd_max(X, MaxX),
fd_min(Y, MinY), fd_max(Y, MaxY),
( number(MaxX), number(MinY), MaxX =< MinY
-> Actions = [exit]
; Actions = [X in inf..MaxY, Y in MinX..sup]
).
A kérdésem az, szükség van-e itt a MaxX =< MinY feltétel vizsgálatára?
A definíció akkor is működne, ha a dispatch_lseq eljárást egyszerűen
csak úgy definiálnánk, hogy
dispatch_lseq(X, Y, [X in inf..MaxY, Y in MinX..sup]) :-
fd_min(X, MinX), fd_max(Y, MaxY).
Ambrus