2014-10-20 2 views
2

프롤로그에서 쿼드 방정식 구현에 문제가 있습니다. 몇 가지 기본 사항을 알고 있지만 같은 시점에 swish.swi 콘솔의 출력을 이해할 수 없습니다. 오류에 대한 귀하의 의견이나 제안이 있으면 감사드립니다.프롤로그에서 이차 방정식을 푸십시오.

delta(A, B, C, D):- D is B*B - 4*A*C. 

equation(A,B,C,X):- D1<0,delta(A,B,C,D1),X is 0. % or false... but how to retur false there? 
equation(A,B,C,X):- D1 =:= 0,delta(A,B,C,D1),X is -B/2*A. 
equation(A,B,C,X): D1>0,delta(A,B,C,D1),X is -B-sqrt(D1)/2*A. 
equation(A,B,C,X): D1>0,delta(A,B,C,D1),X is -B+sqrt(D1)/2*A. 

나는 equation(2, 0, 1, X).

Full stop in clause-body? Cannot redefine ,/2 
</2: Arguments are not sufficiently instantiated 

답변

0

을 runnign 후이 두 가지 오류를 얻고 대한

인수 충분히 인스턴스화되지 않습니다

당신은 델타/4 및 테스트를 교체해야한다 . 또한 결과를 다시 계산하는 것을 피하기 위해 if/then/else를 사용하는 것이 더 좋습니다.

equation(A,B,C,X) :- 
delta(A,B,C,D1), 
( D1 < 0 
-> X is 0 
; D1 =:= 0 
-> X is -B/2*A 
; X is -B-sqrt(D1)/2*A 
). 
+0

감사합니다. 많은 조언을 부탁드립니다! – RMachnik

+0

그러나'D1 <0 '일 때 첫 번째 경우와 비슷한'false' 또는 sth를 반환 할 수 있습니까? 예, 우리는 할 수 있습니다. 우리는 그처럼 sth을해야만합니다. '... (D1 <0 ->, 실패한 ...' – RMachnik

관련 문제