1
我有一個prolog謂詞問題。在Prolog(SICStus)中謂詞不能按預期工作
我有一個棋盤,我想檢查一個棋手沒有棋子的值在1到10之間的棋子是否被稱爲移動棋子。代碼如上所示:
test_board([
[piece(' ',12,blk),piece('R2 ',2,red),piece('RB ',11,red),piece(' ',12,blk),piece(' ',12,blk),piece(' ',12,blk),piece(' ',12,blk),piece(' ',12,blk),piece(' ',12,blk),piece(' ',12,blk)],
[piece(' ',12,blk),piece('RB ',11,red),piece('RF ',0,red),piece('RB ',11,red),piece(' ',12,blk),piece(' ',12,blk),piece(' ',12,blk),piece('RB ',11,red),piece(' ',12,blk),piece(' ',12,blk)],
[piece(' ',12,blk),piece(' ',12,blk),piece('RB ',11,red),piece(' ',12,blk),piece(' ',12,blk),piece(' ',12,blk),piece(' ',12,blk),piece(' ',12,blk),piece(' ',12,blk),piece(' ',12,blk)],
[piece(' ',12,blk),piece(' ',12,blk),piece(' ',12,blk),piece(' ',12,blk),piece(' ',12,blk),piece(' ',12,blk),piece(' ',12,blk),piece(' ',12,blk),piece(' ',12,blk),piece(' ',12,blk)],
[piece(' ',12,blk),piece(' ',12,blk),piece('X ',13,for),piece('X ',13,for),piece(' ',12,blk),piece(' ',12,blk),piece('X ',13,for),piece('X ',13,for),piece(' ',12,blk),piece(' ',12,blk)],
[piece(' ',12,blk),piece(' ',12,blk),piece('X ',13,for),piece('X ',13,for),piece(' ',12,blk),piece(' ',12,blk),piece('X ',13,for),piece('X ',13,for),piece(' ',12,blk),piece(' ',12,blk)],
[piece('B6 ', 6,blue),piece('B4 ', 4,blue),piece('B5 ', 5,blue),piece('B10',10,blue),piece('B7 ', 7,blue),piece('B4 ', 4,blue),piece('B8 ', 8,blue),piece('B9 ', 9,blue),piece('B5 ', 5,blue),piece('B4 ', 4,blue)],
[piece('B7 ', 7,blue),piece('B2 ', 2,blue),piece('B5 ', 5,blue),piece('BB ',11,blue),piece('B3 ', 3,blue),piece('B6 ', 6,blue),piece('B3 ', 3,blue),piece('B1 ', 1,blue),piece('B2 ', 2,blue),piece('B3 ', 3,blue)],
[piece('B3 ', 3,blue),piece('B2 ', 2,blue),piece('BB ',11,blue),piece('B3 ', 3,blue),piece('BB ',11,blue),piece('B2 ', 2,blue),piece('BB ',11,blue),piece('B6 ', 6,blue),piece('B2 ', 2,blue),piece('B7 ', 7,blue)],
[piece('B2 ', 2,blue),piece('B6 ', 6,blue),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([],_):-
fail.
check_mobile_pieces([BoardHead|BoardTail],Opponent):-
check_mobile_pieces_line(BoardHead,Opponent);
check_mobile_pieces(BoardTail,Opponent).
check_mobile_pieces_line([],_):-
fail.
check_mobile_pieces_line([LineHead|LineTail],Opponent):-
piece(_,PieceValue,Opponent)=LineHead,
((PieceValue > 0, PieceValue<11) -> true
;check_mobile_pieces_line(LineTail,Opponent)).
在這個例子中,結果應該是「是」但是是「否」。爲什麼?任何人都可以得到代碼錯誤?
Regards
對手,我要檢查,如果有個播放器(紅色或藍色)價值> 0和<11,如果他有謂詞是真的,如果他沒有,那麼謂語是假的......這是我想要的,但不工作。 – mistic
解決了,謝謝你! – mistic