Predicate not work as expected in Prolog (SICStus) -


I have a problem with the primary language.

I have a board and when I want to see the player does not have pieces with values ​​between 1 and 10, which are called mobile pieces. Codes are shown above:

  test_board ([[piece ('', 12, black), piece ('r2', 2, red), piece ('rb', 11, Slice ('', 12, black), slice ('', 12, black), piece ('', 12, black), piece ('', 12, black), piece ('', 12, black), piece ('', 12, ('', 12, black), piece ('rb', 11, red), piece ('black'), piece ('', 12, black), piece ('', 12, black)], RF ") piece ( '', 12, Black), slice ( '', 12, Black), slice ( 'RB', 11, red), the piece ( '', 12, Black), slice ( '', 12 , Piece ('', 12, black), piece ('', 12, black) Piece ('', 12, black), piece ('', 12, black), RB ', 11, red) piece (' RB ', 11, red), piece (' ', 12, black) ) piece ( '', 12, Black), slice ( '', 12, Black), slice ( '', 12, Black), slice ( '', 12, Black), slice ( '', 12, Black ), Fragment ('', 12, black)], [piece ('', 12, black), piece ('', 12, piece ('', 12, black), piece ('', 12, black) piece ( '', 12, Black), slice ( '', 12, Black), slice ( '', 12 piece ( '', 12, Black), slice ( '', 12, Black), slice ( '', 12, black)], [piece ('', 12, black), piece ('', Piece ('', 12, black), piece ('', 12, black), piece ('x', for 13,), piece ('x', 13, for), piece ('piece (' '', 12, black), piece ('', 12, black)], piece ('', for 12,), piece ('X', for 13,), piece ('', 12, piece ( '', 12, black), piece ('', 12, black), piece ('X', for 13,), piece ('X', 13, for), piece ('', 12, blk ), Piece ('', piece ('', 12, black), piece ('', 12, black)], piece ('x', for 13,), piece ('x', 13, ), Piece ('B6', 10, blue), t Piece ('B6', 6, Blue), Piece ('B4', 4, Blue), Piece ('B5', 5, Blue), Piece ('B7', 7) ('B5 Piece ('B8', 4, Blue), Piece ('B8', 8, Blue), Piece ('B9', '' 5 ',' blue '), piece (' B5 ', 5, blue) Piece ('B2', 2, Blue), Piece ('B5', 5, Blue), 'B4', 4, Blue), Piece ('B7', 7, Blue), Piece ('B4', 4, Blue) Piece ('B3', 3, blue), piece ('B1', 1, blue), piece ('B3', 3, blue), piece ('B6', 6, Blue), slice ('B3', 3, blue) piece ('B2', 2, blue), piece ('B3', 3, blue)], t Piece ('B3', 3, blue), piece ('B2', 2, blue), piece ('BB' piece ('B2', 11, blue), piece ('B2', 2, Piece ('B' ', 11, Blue) Piece (' B6 ', 6, Blue), Piece (' B ', 11, Blue), Piece (' B3 ', 3, Blue) ('B2', 2, Blue), Piece ('B7', 7, Blue)], [Piece ('B2', 2, Blue), Piece ('B6 Piece (' B2 ', 4 Piece ('B5', 5, Blue), Piece ('B4', 4, Blue), Piece ('B2', 2, Blue), Piece ('BB', 11, Blue) , Piece ('BF', 0, blue), piece ('BB', 11, blue), piece ('B8 ', 8, blue), piece (' b2 ', 2, blue)]]). Check_mobile_pieces ([], _): - failed Chek_mobail_spes ([Board Head | Boardtel], respondent): - Chek_mobail_pisian_lain (Boardhed defendant); Check_mobile_pieces (BoardTail, rival). Check_mobile_pieces_line ([], _): - failed check_mobile_pieces_line ([LineHead | LineTail], opponent): - piece (_, PieceValue, opponent) = LineHead, ((PieceValue & gt; 0, PieceValue of & lt; 11) - & Gt; true; check_mobile_pieces_line (LineTail, rival)).   

In this example the result should be "yes", but "no" .. why? Can anybody get the error in the code?

Regards

You should ask which query you issue, for me It is not obvious that much Prolog is handled with the instability of variables of behavior, and even knowing that without the rival binding, it is difficult to answer.

Anyway, I think you'll find the false because rival is a line, then piece (_, PieceValue, opponent) Keeping changing for each element in = LineHead, check_mobile_pieces_line / 2 will fail before the exhibit will make you interested in the exam.

The easiest way to search in the edit list is using member / 2, then if a player sees the moving piece:

  has_movable (player): - test_board (board), member (line, board), peeking one line member (piece (_, value, player), line),% a piece value of player & gt; 0, value & lt; 11.   

To say that the player does not have any trend:

  .... \ Has_movable (player), ... .    

Comments

Popular posts from this blog

java - NullPointerException for a 2d Array -

python - Assemble mpeg file unable to play in mediaplayer -

c# - NameSpace Manager or XsltContent to parse aspx page -