방금 Prolog에서 절대 함수를 구현하려고 시도했지만 이상한 행동이 있습니다. 내 코드이었다SWI-Prolog의 물음표 - 비 결정적 functor
absval(X, RESULT) :- X >= 0, RESULT is X.
absval(X, RESULT) :- X < 0, RESULT is -X.
을 내가 SWI - 프롤로그 absval(-2,X).
에하려고 할 때 예상대로
X = 2
yes
를 얻을. 하지만 그렇지 않으면 absval(2,X)
을 호출 할 때 X = 2 ?
이 발생하고 다른 입력을 삽입해야합니다. enter를 누르면 yes
이됩니다.
두 번째 결과는 무엇을 의미합니까? 내 솔루션에 무슨 문제가 있습니까? 당신이 행동과 일치하지 않는보고 무엇을
발생하는 문제는 프로그램이 결정적이지 않다는 사실로 설명 할 수 있습니다. 'absval/2'에는 두 가지 규칙이 있습니다. 따라서 Prolog는 첫 번째 규칙을 사용하여'absval (2, X)'를 만족시킨 후 목표를 다시 달성하기 위해 역 추적합니다. 두 번째 규칙의 첫 번째 부 목적'(X <0)'은 실패하고 두 번째 해결책을 얻지 못할 것입니다. 결정 론적 동작을하기 위해서는'absval (X, RESULT) : -X> = 0,!, RESULT is X '와 같이'X> = 0' 다음에 cut 연산자를 추가하십시오. –