2013-04-09 2 views
3

SWI Prolog를 사용하여 대학 시험을 위해 Prolog를 배우고 있는데 술어를 구현하는이 간단한 프로그램에 대해 몇 가지 질문이 있습니다.이 두 술어는 TRUE입니다. 다른 경우 (일치하지 않는 경우) 일치하는 경우 거짓이라고 말하십시오. Prolog에서 다른 술어가 작동하지 않음 (항상 거짓)

코드입니다 :

[debug] 10 ?- different(a,b). 
false. 

[debug] 11 ?- different(a,a). 
false. 

첫 번째를 볼 수 있듯이 :

different(X,X) :- !, 
       fail. 

diferent(_,_). 

문제는 내가 실행하려고하면 프롤로그에서 다음 쿼리가 항상 FALSE 얻을 쉘이다 질의는 b와 일치하지 않기 때문에 TRUE로 말해야합니다.

왜?

+4

왜 디버깅 할 때 유래? –

+0

나는 바보 같은 질문에 사과한다. 나는 밤새 직장에서 일했으며, 나는 혼란에 빠져 있었다. – AndreaNobili

답변

4

다른 (_, _)을 (_, _)로 변경하십시오. 즉, 맞춤법 오류입니다. 두 번째 조건자는 쿼리와 일치하지 않으므로 검사하지 않습니다. 난 당신이 하이 잠금 모드를 사용하는 것이 좋습니다 (안 난 강력하게 당신이 그것을로 전환하는 것이 좋습니다 경우) 당신이 당신의 프롤로그 파일을 편집 이맥스를 사용하는 경우

이 프로그램은

different(X,X) :- !,fail. 
different(_,_). 
+0

OMG ... 나는 사무실에서 일하는 밤새 막 돌아왔다. 분명히 ... 아직 집중할 수 없습니다 .... 커피가 더 필요합니다 ... tnx – AndreaNobili

0

을해야합니다. 커서가 단어 위에있을 때마다 파일의 모든 일치를 패턴과 비슷한 방식으로 강조 표시합니다. 더 큰 프로젝트를 개발할 때 수 시간의 고통을 덜어줍니다.

enter image description here

2

이 "운동"은 무의미하다. 을 사용하십시오!

는 IMO different/2 합리적인 정의는 다음과 같습니다

different(A,B) :- dif(A,B). 
관련 문제