2009-12-14 3 views

답변

1

논리적 부정의 개념은 이미 오류 발생시 Prolog에 포함되어 있습니다. 구현이 (가 할 수있는 일)을 제공하지 않는 경우

not(P) :- call(P), !, fail. 

또는

not(P) :- (call(P) -> fail ; true) 

그런 다음 수식을보고

not을 생각할 수있는, not 싱글에 바로 적용이 단순화 될 수있다 술어 :

~(A & ~D) & ~B & ~A = (~A | D) & ~B & ~A = ~A & ~B 

그냥 드 모건 법률과 사실에 대한 고려이다 D은 술어의 만족 가능성에 유용하지 않습니다.

당신은 그들을 결합 할 수 있습니다

final_predicate :- not(B), not(A). 

편집 :,이고 기억 ;는 OR입니다.

1

단순히 PROLOG를 사용하여 명제 논리 문을 평가하려는 경우 다음을 시도 할 수 있습니다. 의 값의 인코딩을 시작하여 같은 '명제'a, bd :

b :- fail. % this means that b is false

a :- true. % this means that a is true.

... 등. 예를 들어, 가정 당신의 문을했다 :

a :- fail. 
b :- fail. 
d :- fail. 

그런 다음 문을 실행 :

?- not(a), not(b), not(d), not(a). 
true. 

주의 : 여기 인코딩 된 '명제'는 '시뮬레이션'- 그들은 실제로 제로 인수에 대응 일차있어 PROLOG에 관한 한 술어

ps. a :- true.a.으로 간소화 할 수 있습니다.

pps. 필자가 길을 넘어서서 문을 기호화하여 표준화와 같은 다른 형식으로 조작 한 후에는 메타 해석기을 PROLOG에 작성해야합니다. 도움이 될 Clocksin and Mellish's Programming in Prolog, Appendix B, 'Clausal Form Program Listings'을 참조하십시오.

관련 문제