Pallos Peter <pallosp(a)freeweb.hu> writes:
Hello!
Kipróbáltam a case globális korlátot, de legnagyobb erõfeszítéseim
ellenére sem sikerült mûködésre bírnom. Mindig "consistecy error"
exceptiont dob.
A következõ globális korlátot szeretném megvalósítani:
Adott egy 2x2-es mátrix:
block(NW, NE,
SW, SE).
Az elemek 0-tól 1-ig terjedhetnek, és ha a négy változó között vannak
1-esek, mindenképp téglalapot kell alkotniuk.
Az állapotokat hasonlóképpen neveztem el, mint ahogy a 96. oldalon a
felemasok predikátumban láttam.
A példaprogramnak végre kellene hajtania a NW#=0 szûkítést, mert a bl
felsõ mezõ biztosan nem lehet 1-es.
Köszönöm a segítséget,
Peti
casetest(B) :-
B=[block(NW,NE,SW,SE)],
domain([NW,NE,SW,SE], 0, 1),
NE#=0, SE#=1,
case(block(NW,NE,SW,SE), B,
[node([] , NW, [(0..0)-x0, (1..1)-x1]),
node(x0 , NE, [(0..0), (1..1)-x01]),
node(x1 , NE, [(0..0)-x10, (1..1)-x11]),
node(x01 , SW, [0..0]),
node(x10 , SE, [0..0]),
node(x11 , SW, [(0..0)-x110, (1..1)-x111]),
node(x110, SE, [0..0]),
node(x111, SE, [1..1])
]).
A kezikonyv ezzel kezdi:
`case(+TEMPLATE, +TUPLES, +DAG)'
`case(+TEMPLATE, +TUPLES, +DAG, +OPTIONS)'
TEMPLATE is an arbitrary non-ground Prolog term. Its variables
are merely place-holders; they should not occur outside the
constraint nor inside TUPLES.
Tehat a case 1. es 3. argumentumaban nem szabad olyan valtozokat
hasznalni, amik a 2.-ban vagy a case hivason kivul elofordulnak. Vagyis
nevezd at a casetest 1., 2. es 3. soraban
Ezenfelul a node azonositok ujabban szamok kell legyenek (elnezest, nem
frissitettem a foliakat :-()
Harmadreszt az x0 sorban az egyik agban nincs -, a kezikonyv szerint ez sem
megengedett.
Sok sikert az ujabb kiserletekhez!
-Peter