1

질문의 내용이 정확하지 않습니까, 사과하십시오. 기본적으로 내가 원하는 것은 Prolog에서 오류 처리를 생성하는 것입니다. 예를 들면 :Prolog - 부정확 한 오류를 잡으려면 어떻게해야합니까?

?- fruit(X). 

가 어떻게 그들이 오류 만든 사용자에게 알리는 것 : 사용자가 조회 할 수 있었다 이제 경우

fruit(apple, pear). 

?

Data should be entered in the format: 'fruit(X, Y)' Please check your query and 
try again. 

답변

0

나는 그것이 응용 프로그래머의 직업이라고 생각하지 않는다. 일부 Prolog 시스템에는 이미이 기능이 있습니다. ISO-프롤로그와 부합하는 시스템 같은 오류 existence_error(procedure,fruit/1) 같은 시스템 신호에서

fruit(_) :- 
    write('Data should be entered in the format: \'fruit(X, Y)\' Please check your query and try again.'), 
    nl, 
    fail. 
+0

당신의 선생님, 환호 생명의 은인이다! – fleggle

3

:

이 특별한 경우를 들어 당신은 메시지를 출력합니다 "잘못된"인수에 대응와 술어를 만들 수 있습니다. 좀 더 정확히 말하자면, Prolog 플래그 unknown이 있습니다.이 플래그는 동작을 얻으려면 error으로 설정해야합니다. 대부분의 시스템에서는 이것을 매우 합리적인 기본값으로 사용합니다. 그러나 확실하게 목표 인 set_prolog_flag(unknown,error)을 발행하면됩니다.

오류는 fruit/1이 있다고 예상되지만 더 이상 가정하지는 않습니다.

오류가 누락 된 것이 좋습니다. 그것은 오류 일 수 있습니다. 똑같이, fuit/1이라는 의미의 오타가 될 수 있습니다. 프랑스어는 (도망칩니다) 또는 라틴어 (그는)였습니다. 아니면 용어를 적절히 중첩하는 것을 잊어 버렸을 수도 있습니다. 누가 알아. 실제 오류가 무엇인지에 대한 많은 훌륭한 이론이 있으므로 제안은 조금 더 신중해야합니다.

많은 시스템에서 유사한 제안 사항이 있습니다. 이들은 종종 잡히지 않은 오류를 해석하는 최상위 루프에 연결됩니다.

당신과 같이 이러한 오류를 직접 잡을 수 :

?- catch(Goal, error(existence_error(procedure,Inex),_), Action_on_error). 
관련 문제