Szia!
Oszinten szolva csak futolag neztem ra a kodra, de az feltunt, hogy a
globalis korlatod vagy azonnal meghiusul, vagy azonnal kilep (mindket
agon van "exit"). A Prolog - tapasztalatom szerint - mindjart a globalis
korlat felvetelekor (jelen esetben a max_lt meghivasakor) lefuttatja azt
egyszer, a Te korlatot szepen szukit, amit tud (akkor meg nem tul
sokat), majd ki is lep, a kesobbi korlatok nem is tudjak felebreszteni,
mert mar reg nem letezik.
Udv:
Attila
Péter wrote:
Szevasztok!
Az lenne a kérdésem, hogy megpróbáltam megcsinálni a 4. kisházit,
elsőre úgy tűnt, hogy jól működik, pl az alábbi esetre:
domain([X,Y,U,Z], 0, 9), X#>=4, Y#>=8, U#>=5, max_lt([X,Y,U], Z).
De ha korlátokat hozok ki a max_lt/2 után akkor, valahogy nem akarja
felébreszteni az én korlátomat amit írtam, pl ennél a példánál:
domain([X,Y,U,Z], 0, 9), max_lt([X,Y,U], Z), X#>=4, Y#>=8, U#>=5.
A programkód-ból egy részlet, ami szerintem felelős a hibáért:
feltmake([],L,L).
feltmake([A|B],E,L) :- C=..[dom,A], E1=[C|E], feltmake(B,E1,L).
max_lt(L,Z):- feltmake(L,[],Flist), fd_global(max_lt(L,Z),L-0,[dom(Z)
|Flist]).
:- multifile clpfd:dispatch_global/4.
:- discontiguous clpfd:dispatch_global/4.
clpfd:dispatch_global(max_lt(_,Z),L0-S0,Ll-S,Actions) :-
fd_max(Z,Zmax), filter(L0,Ll,S0,S,Zmax), length(Ll,Len),
( Len=0 -> Sk is S+1, Actions=[Z in Sk..sup|exit]
; szuk(Ll,Zmax,Szlist), Sk is S+1, Szl=[Z in Sk..sup|Szlist],
Actions=[exit|Szl]
).
Segítségeteket előre is köszönöm!
Üdvözlettel:
Péter
_______________________________________________
NHLP-l mailing list
NHLP-l(a)cs.bme.hu
http://cs.bme.hu/mailman/listinfo/nhlp-l