2012-02-09 4 views
1

프롤로그 (구현 - 일식 프롤로그)에서 산술 표현을 해결하려고합니다. 해결하고자하는 산술 표현식은 다음과 같습니다프롤로그에서 산술 표현식 평가를 수행하는 방법은 무엇입니까?

A * (C + B * X) + D * X = E 

X 계산되는 값과 다른 모든 (A, B, C, D, E) 모든 숫자가된다. 예를 들어

: 5 * (3 + 2 * X) + 2 * X = 39, 프롤로그에 입력 될 값 2

쿼리 (목표)에 X를 할당한다 컴퓨팅 걸릴 형식 :

?- compute(5*(3+2*X)+2*X = 39, Result). 

'결과'와 'X'의 값은 함께 묶여 야합니다. 이렇게하려면 프롤로그 프로그램을 어떻게 작성해야합니까?

감사합니다.

답변

4

ic이 아닌 fd을 사용한다고 가정합니다. 그것은 사물을 조금 단순화합니다.

:-lib(fd). 

은 또한 다음 두 단계를 수행 할 수있는 경우에만 방정식하지 부등식, 단지 하나의 변수 X가 가정 :

compute(L=R, X) :- 
    term_variables(L, [X]), 
    L #= R. 

우선, 왼쪽에서 변수를 추출 방정식을 계산하는 제약 조건을 게시하십시오. 방정식이 유효하면 변수를 인스턴스화합니다.

ic 라이브러리로 편집

, eval(L)#=R를 사용합니다.

+0

미리보기 주셔서 감사합니다. 테스트를 거쳤습니다. 나는 프롤로그를 처음 접했을 때 X가 값을 계산하는 방법을 이해할 수 없었다. # =은 지연된 제약 조건이라고 가정합니다. 솔루션이 어떻게 계산되고 있는지 안내해주십시오. 고맙습니다. – kallakafar

+1

예, '# =/2'는 정수 제약을 나타냅니다. IC Solver에 대해 설명하는 ECLiPSe의 Constraint Library Manual의 3.1 절을 참조하십시오. 내부에서 일어나는 일은 제약 조건이 게시 될 때 제약 조건 전달 알고리즘이 시작된다는 것입니다. 이는 일관성있게하기 위해 제약 조건에 첨부 된 변수의 도메인을 업데이트합니다. 이 경우 솔루션을 얻는 데 충분합니다. Apt/Wallace의 "Constraint Logic Programming with Eclipse"와 마찬가지로 Marriott/Stuckey의 "Programming with Constraints"는 좋은 교과서입니다. – twinterer

+0

그 방향에 대해서도 감사합니다. 정말 도움이됩니다! 고맙습니다. – kallakafar