2012-04-26 4 views
2

Мне нужно свести к минимуму предикат в 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. Любые подсказки/обходные пути?

ответ

1

Вы можете добиться того же результата, что fd_minimize/2 содержит findall/3 и keysort/2 предикаты.

findall(X-T,army(T,X),B),keysort(B,[MinX-Territory|Cs]), 

может заменить

fd_minimize(army(Territory,X),X), 

обеспечивая одинаковое значение для Territory.

+1

Спасибо за ваш ответ. Реализация gnu proog java не предоставляет метод Keysort, и я - noob в Prolog, поэтому я написал этот код: 'place_army (Player, Territory): - findall (X, army (_, X), Значения), вид (значения, [армия | _]), армия (территория, армия), владелец (игрок, территория),!. ' – Otacon

+0

@ Отакон: разрез должен быть размещен сразу после армии/2 для поддержания эквивалентность двух других попыток. Во всяком случае, неплохо для ноба! – false

+0

Thx много для ваших намеков: D (и большое спасибо за «неплохо для noob»): D Я решил переключиться на SWI-PROLOG. Это немного тяжелее, но у меня есть все, что мне нужно для моего небольшого развития: D Однако, все же, большое спасибо за вашу поддержку !!! – Otacon

2

Есть две разные системы с очень похожим названием:

GNU Prolog (см ), система ISO Prolog с пионерской CLP (FD) реализации которой была принята это имя 1999-04-19 и который является actively developed – наиболее последняя версия была выпущена час назад. fd_minimize/2 и т. Д. Являются частью GNU Prolog.

И вот последняя система под названием GNU Prolog for Java - последняя версия которой от 2010-08-15.

Возможно, это путаница имен может быть разрешена.

+1

Но для выполнения этой работы с java мне нужно сделать интерфейс JNI! – Otacon

Смежные вопросы