2017-05-21 12 views
3

에 다른/존재하지 않는 사실과 함께 사용하여 OR 연산자 나는 사실이 : 댄서 사실은 그렇지 않습니다 당신이 볼 수 있듯이프롤로그

dances(juliet) :- loves(romeo, juliet). 
dances(juliet) :- dancer(juliet). 

: 다음

loves(romeo, juliet). 

을 나는 '또는'규칙이 존재하지만 이것은 문제가되지 않아야하며 춤 (줄리엣)은 나를 사실로 돌려 주어야한다. 그 대신에 그것은 나를 진실로 돌려 보낸 다음 댄서 사실에 대한 exsitence 예외를 던집니다. 존재하지 않는 사실이나 규칙에 대한 규칙을 작성하는 방법이 있습니까? 사실이 존재하는지 확인해야합니까?

답변

5

"존재하지 않는 경우 실패"를 달성하려면   dynamic/1 지시문을 사용하여 동적 인을 선언 할 수 있습니다. 예를 들어

: 당신이 당신의 프로그램이 지시문을 추가하면

 
:- dynamic dancer/1. 

, 당신은 얻을 :

 
?- dances(X). 
X = juliet . 

및 오류없이.

3

내가 아는 한 존재하지 않는 술어를 사용하는 방법은 없습니다. this question에 설명 된 방법을 사용하여 규칙이 존재하는지 확인하거나 어떤 종류의 자리 표시자가있어 인지 확인 할 수 있습니다. 규칙이 항상 거짓 인 경우 규칙이 유용하지 않은 것처럼 보이므로 규칙을 사용하기 전에 몇 가지 사례를 작성하십시오. 그렇지 않으면,

dances(juliet) :- catch(dancer(juliet), 
         error(existence_error(procedure, dancer/1), _), 
         false 
       ). 

술어가있는 경우 dancer(juliet)를 실행합니다 그렇지 않은 경우 실패 및 오류 :

dancer(someone). %% To make sure that fact exists 

loves(romeo, juliet). 
dances(juliet) :- loves(romeo, juliet). 
dances(juliet) :- exists(dancer), dancer(juliet). 
1

기술적으로, 당신이 뭔가를 할 수 있습니다.

나는 이것이 매우 바람직한 일이라고 말하지 않을 것이다.