шахматные границы, которые устанавливаются фигурами, в прологе

#prolog #chess

Вопрос:

Я играю в шахматы с ИИ в прологе, используя алгоритм min-max с альфа-бета-обрезкой, и я застрял в проблеме с движением моей ладьи. вот как я писал эти ходы до сих пор:

 %%rook possible moves: movement(Board,piece(Color, rook, Col, Row), piece(Color, rook, NewCol, Row)) :-  between(0, Col, DeltaCol),  dif(DeltaCol, 0),  NewCol is Col - DeltaCol,  in_boundaries(NewCol,Row),  nonmember(piece(Color,_,NewCol,Row),Board);  (   enemy(Color,OppColor),  member(piece(OppColor,_,NewCol,Row),Board)).   movement(Board,piece(Color, rook, Col, Row), piece(Color, rook, NewCol, Row)) :-  between(0, Col, DeltaCol),  dif(DeltaCol, 0),  NewCol is Col   DeltaCol,  in_boundaries(NewCol,Row),  nonmember(piece(Color,_,NewCol,Row),Board);  (   enemy(Color,OppColor),  member(piece(OppColor,_,NewCol,Row),Board)).   movement(Board,piece(Color, rook, Col, Row), piece(Color, rook, Col, NewRow)) :-  between(0, Row, DeltaRow),  dif(DeltaRow, 0),  NewRow is Row - DeltaRow,  in_boundaries(Col,NewRow),  nonmember(piece(Color,_,Col,NewRow),Board);  (   enemy(Color,OppColor),  member(piece(OppColor,_,Col,NewRow),Board)).  movement(Board,piece(Color, rook, Col, Row), piece(Color, rook, Col, NewRow)) :-  between(0, Row, DeltaRow),  dif(DeltaRow, 0),  NewRow is Row   DeltaRow,  in_boundaries(Col,NewRow),  nonmember(piece(Color,_,Col,NewRow),Board);  (   enemy(Color,OppColor),  member(piece(OppColor,_,Col,NewRow),Board)).  

и все идет не так, как планировалось, главная проблема для меня заключается в том, чтобы установить новые вертикальные и горизонтальные границы для ладьи в случае, если в той же строке есть другая фигура, например, посмотрите на эту вертикальную доску: (,,Q,, R,,_, P).

Q = Королева, R= Ладья. P= Позиция пешки Q равна (3,1) (столбец 3, Строка 1), значение R равно (5,1) (Столбец 5,Строка 1), а позиция пешки равна (8,1) (столбец 8,строка 1).

для примера предположим, что ферзь черная, ладья и пешка белые, и я хочу вернуть возможные ходы ладьи, которые:(3,1)(4,1)(6,1)(7,1) как бы я это сделал? это не работает с тем, как я это написал.