Мне нужно свести к минимуму предикат в Prolog. В настоящее время я использую GNU Prolog Java. я получил этот факт Конечный доменный решатель fd_minimize/2
army(Territory,X).
Это говорит о том, что данная территория получила X армии. Теперь я хочу найти минимальное количество армий, принадлежащих данному игроку. Так что я пишу:
place_army(Player, Territory):-
fd_maximize(army(Territory, X), X),
owner(Player, Territory).
Переводчик говорит:
java.lang.IllegalArgumentException: Цель не в настоящее время активный
после того, как немного я нашел проблему: http://www.gprolog.org/manual/gprolog.html#htoc313 Я предполагаю, что проблема в том, что реализация Java-интерпретатора не имеет решения FD. Любые подсказки/обходные пути?
Спасибо за ваш ответ. Реализация gnu proog java не предоставляет метод Keysort, и я - noob в Prolog, поэтому я написал этот код: 'place_army (Player, Territory): - findall (X, army (_, X), Значения), вид (значения, [армия | _]), армия (территория, армия), владелец (игрок, территория),!. ' – Otacon
@ Отакон: разрез должен быть размещен сразу после армии/2 для поддержания эквивалентность двух других попыток. Во всяком случае, неплохо для ноба! – false
Thx много для ваших намеков: D (и большое спасибо за «неплохо для noob»): D Я решил переключиться на SWI-PROLOG. Это немного тяжелее, но у меня есть все, что мне нужно для моего небольшого развития: D Однако, все же, большое спасибо за вашу поддержку !!! – Otacon