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@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@sziami.cs.bme.hu
http://sziami.cs.bme.hu/mailman/listinfo/nhlp-l