2012-04-26 1 views
2

프롤로그에서 조건자를 최소화해야합니다. 현재 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/2findall/3keysort/2 술어를 제공하는 동일한 결과를 얻을 수 있습니다.

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

Territory는 동일한 가치를 제공

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

대체 할 수있다. 매우 비슷한 이름을 가진 두 개의 서로 다른 시스템이 있습니다

+1

답장을 보내 주셔서 감사합니다. gnu 프롤로그 Java 구현은 Keysort 메소드를 제공하지 않으며 Prolog에서 멍청한 놈입니다. 그래서이 코드를 작성했습니다 : 'place_army (Player, Territory) : - findall (X, army (_, X), 값 : 정렬 (값, [Army | _]), 군대 (지역, 군대), 소유자 (플레이어, 지역),! – Otacon

+0

@Otacon : 군대/2 직후 인하해야 유지됩니다. 다른 두 시도와 동등 함. 어쨌든 멍청한 녀석은 나쁘지 않아! – false

+0

Thx : 힌트를 많이 주셨습니다. D (그리고 멍청한 놈에게는 나쁜 것이 아닙니다.) : D SWI-PROLOG로 전환하기로 결정했습니다. 조금 더 무거워지만 내 개발에 필요한 모든 것을 갖추고 있습니다. D 그래도 여전히 고맙습니다. – Otacon

2

:

GNU 프롤로그 ( 참조),이 이름 1999-04-19을 채택하고 선구 CLP (FD) 구현과 ISO 프롤로그 시스템은 actively developed –는 가장 최근 버전은 한 시간 전에 출시되었습니다. fd_minimize/2 등은 GNU Prolog의 일부입니다.

그리고 가장 최근 버전이 2010-08-15GNU Prolog for Java이라는 최신 시스템이 있습니다.

아마도 이러한 이름 혼란을 해결할 수 있습니다.

+1

하지만 자바와 함께이 작업을하려면 JNI 인터페이스를 만들어야합니다! – Otacon