2009/6/20 Peter Szeredi <szeredi(a)cs.bme.hu>hu>:
jovore minmax ebredesi feltetellel tervezem elmondani
az lseq-t...
Igen, de persze nem elég csak az ébredési feltételt módosítani,
ahogyan a 4. kisházi trükkös mintabemenete mutatja.
[am]king ~/a/nlp/tmp$ cat glo-t.pl
% felhasználói korlát példa az NLP jegyzetből
:- use_module(library(clpfd)).
% X #=< Y, globális korlátként megvalósítva
lseq(X, Y) :-
fd_global(lseq(X,Y), void, [minmax(X),minmax(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]
).
[am]king ~/a/nlp/tmp$ rlwrap sicstus
SICStus 3.12.8 (x86_64-linux-glibc2.3): Tue May 8 13:15:39 CEST 2007
Licensed to BUTE NHLP
| ?- ['glo-t'].
% consulting /home/ambrus/a/nlp/tmp/glo-t.pl...
% loading /home/ambrus/local/sicstus/lib/sicstus-3.12.8/library/clpfd.po...
[...]
% loaded /home/ambrus/local/sicstus/lib/sicstus-3.12.8/library/clpfd.po
in module clpfd, 20 msec 915784 bytes
% consulted /home/ambrus/a/nlp/tmp/glo-t.pl in module user, 20 msec 918568 bytes
yes
| ?- assert(clpfd:full_answer).
yes
| ?- X in {3,4,9}, Y in {1,7}, lseq(X, Y).
Y = 7,
user:lseq(X,7),
X in 3..4 ? ;
no
| ?-
[am]king ~/a/nlp/tmp$
Ambrus