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