"Fozo Csaba" <fozocsabi(a)freestart.hu> writes:
Sziasztok!
Meg tudná vki mondani, hogy miért nem lehet clpfdben korlátokat feltételes
szerkezetben használni? Azt szeretném valahogye elérni, hogy bizonyos
korlátokat csak más korlát-feltételekkel vegyen fel a program. Így ha ez
késõbb meghiusuláshoz vezetne, visszalépjen erre a feltételes szerkezetre a
korábban felvett korlátokat semmissé venné és az else ágat választaná ahol
ismét pár korlát feltétellel vennék fel újabb korlátokat. Gyakorlatilag az
történik, hogy nincs visszalépés. Pedig a slideokban valahol mintha ezt
olvastam volna. 1xûen amint oda jutna hogy az adott feltételekkel felvett
korlátok összesége inkonzisztens, akkor meghiusul az egész. Valószeg én nem
értek vmit nagyon...
Igen, furcsa elkepzeleseid vannak. A Prolog felteteles szerkezete pont
arrol hires, hogy nem hagy maga utan valasztasi pontot, te meg pont erre
vágysz...
Itt 1 részlet a programból, hátha segít:
( SO #\= 0, X #\= 0 ->
( ElE #= 1, ElEE #=< 0 -> E #= 1
; L == [], ElE #= 0 -> E #= 0
; true
)
; E #= 0
),
E a radarkép éppen vizsgált mezejének értéke. Ha 1 akkor felhõrész, ha 0
akkor égrész, -1 ha radarképen kívül van. SO az E sorának maradék
sorösszege, X az E oszlopának maradék oszlopösszege, figyelembe véve az
eddig vizsgált mezõket. ElE az oszlopban egyel feljebb levõ mezõ értéke.
ElEE a 2vel feljebb levõé. L ==[] akkor teljesül, ha az a vizsgált mezõ az
utolsó az oszlopban.
Tehát azt akartam leírni, hogy ha SO és X sem 0, tehát a vizsgált mezõ még
lehet 1es is, 0 is, akkor:
1) Ha a mezõ fölött levõ mezõ 1, a fölötte levõ pedig vagy 0, tehát ég, vagy
radarképen kívüli, akkor a vizsgált mezõnknek mindenképp 1nek kell lennie,
hogy legalább 2x2es felhõk legyenek.
2) Ha nem ez a helyzet áll fenn, akkor az else ágra lép, ahol L ==[], tehát
az utolsó mezõn vagyunk, és az elõzõ mezõ EiE 0, akkor ennek a mezõnek is
0nak kell lennie.
Ez nem egy deklarativ leiras, tehat legfeljebb egy globalis korlat
segitsegevel lehetne beprogramozni...
Azt javaslom elso lepesben probalj meg kevesbe ambiciozus lenni, es bizd a
fent leirt kovetkezteteseket a korlat propagaciora. Ez azt jelenti, hogy a
korlat valtozoid kozotti osszefuggeseket kell leirnod. Pl azt, hogy ha A es
D is 1, akkor B-nek es C-nek is 1-nek kell lennie, igy irhatod le:
A #/\ D #=> B #/\ C
Ha vagy SO vagy X már 0, akkor E mindeképp 0 kell
legyen.
(#\ S0) #\/ (#\ X) #=> (#\ E)
-Peter