Az idezett getval eljaras nem hagy maga utan valasztasi pontot.
Ha hagyna, akkor a nyomkovetesben az Exit kapu soranak elejen megjelenne egy
? jel.
Egyebkent a szerintem legelegansabb megoldas erre a feladatra ez:
getval(L, V) :-
memberchk(v(V), L).
-Peter
2009/4/30 Levente Zsíros <zslevi(a)gmail.com>
A sudokuban amikor kibontom egy cella tartlamát (a
value-t olvasom ki
belőle) ezt használom:
getval([H|T],V):-
(
H=v(V),!;
getval(T,V)
).
Valamiért azonban úgy viselkedik, mintha választási pont maradna lenne
benne:
| ?- getval([s(1),v(2)],V). 1 1 Call: getval([s(1),v(2)],_531) ? 2 2
Call: s(1)=v(_531) ? 2 2 Fail: s(1)=v(_531) ? 3 2 Call:
getval([v(2)],_531) ? 4 3 Call: v(2)=v(_531) ? 4 3 Exit: v(2)=v(2) ?
3 2 Exit: getval([v(2)],2) ? 1 1 Exit: getval([s(1),v(2)],2) ? V = 2 ?
;no% trace| ?-
Ez választási pont, vagy sem? Okoz ez többlet memóriafoglalást? Ki lehet
küszöbölni valahogy?
--
Zsíros Levente
_______________________________________________
NHLP-l mailing list
NHLP-l(a)sziami.cs.bme.hu
http://sziami.cs.bme.hu/mailman/listinfo/nhlp-l