Szia Attila!
count([A,A,B],2) felfüggesztődik, mert nem elég okos. Nem veszi észre, hogy
ha háromból kettő változó azonos és pontosan kettő értéke 1, akkor a két
azonosnak kell 1-nek lennie, a harmadik meg 0 kell legyen. Az enyém sem jön
rá erre.
count([A,A,B], 2), labeling([A]).
Itt felvettünk egy korlátot, majd a labeling elkezdi kipróbálni a lehetséges
értékeket A-ra. Behelyettesíti 1-re, ettől felébred a korlát, mert látja,
hogy van benne két behelyettesített elem. Mindkettő 1, tehát megállapítja,
hogy a maradékban 2-2=0 darab 1-es van, tehát B 0 kell legyen. Ha kérünk még
további megoldást, akkor meghiúsul visszalépünk a labeling-re és A-t
behelyettesítjük 0-ra. Ekkor megint felébred a korlátunk, mert van benne két
behelyettesített érték. Látja, hogy ezek nem egyesek, tehát a maradék
listában kell lennie a 2 egyesnek. De a maradék lista 1 hosszú, vagyis
meghiúsul.
count([A,A,B,C], 2), labeling([A])
Itt két megoldás van. Labeling kipróbálja A-ra az 1-et, és akkor a korlát
kihozza, hogy B és C 0. Újabb megoldást kérve a labeling kipróbálja A-ra a
0-t és ekkor a korlát kihozza, hogy B és C 1. Nincs több megoldás. Persze a
két megoldás jöhet fordított sorrendben, attól függően, hogy a labeling
melyik értékkel kezdi.
A korlátot tehát elég okossá kell tenni ahhoz, hogy ha megtudja A értékét
(akár azt hogy 1 akár azt hogy 0), akkor ki tudja találni a többi értéket.
Üdv
Zsolt
2011/9/23 Jámbor Attila <attila.jambor(a)gmx.com>
Szia Péter & Zsolt!
Az első kisházival kapcsolatban lenne kérdésem.
Nem egészen világos, hogy count([A,A,B], 2), labeling([A]). miért találja
meg a megoldást, míg a count([A,A,B], 2). hívás felfüggesztődik?
A ti megoldásotok a count([A,A,B,C], 2), labeling([A]).-ra mit adna
eredményül?
Köszönöm,
Attila
_______________________________________________
NHLP-l mailing list
NHLP-l(a)sziami.cs.bme.hu
http://sziami.cs.bme.hu/mailman/listinfo/nhlp-l