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) ?
Ez választási pont, vagy sem? Okoz ez többlet memóriafoglalást? Ki lehet küszöbölni valahogy?
--
Zsíros Levente