2014-11-15 2 views
3

처음으로 창 8에 프롤로그 SWI을 실행 중입니다. 프롤로그 - SWI에 내가 그것을로드 할 때 (상담)프롤로그에서 정의되지 않은 프로 시저 오류 SWI

hello. 
a. 
b. 

(I 완전한 프롤로그 초보자 해요), 그리고 :

은 3 사실에 매우 기본적인 내 프로그램 (.pl로) 파일입니다 프로그램 작업, 내 출력이 오류가 발생합니다 :

이제
12 ?- b. 
true. 

13 ?- a. 
true. 

14 ?- c. 
ERROR: toplevel: Undefined procedure: c/0 (DWIM could not correct goal) 

c 다음 그 괜찮지 만, 온라인 예보고 후 사실로 프로그램에 언급 된 적이 있기 때문에 간단한 오류 인 경우 그리고이 예제에서 Prolog 클래스에서 찾은 것들은라고 대답합니다. 사실이 프로그램에있을 때이고 그렇지 않은 경우 no입니다. 내 대답은 true이라면 대답하고 그렇지 않다면 나는 그 긴 오류를 준다.

는 안개입니다 example

응답 no이 링크를 참조하십시오.

답변

4

SWI는 Prolog IV의 쉘에서 영감을받은 약간 다른 최상위 쉘을 가지고 있습니다. 아이디어는 다시 실행 가능한 쿼리로 대답하는 것입니다. 따라서 yes 대신 true.no 대신 false.이 좋습니다. 이는 특히 다음 쿼리에 응답을 "다시 붙여 넣기"를 원할 때 유용합니다.

?- append(Xs,Ys,[1,4,7]). 
Xs = [], 
Ys = [1, 4, 7] ; 
Xs = [1], 
Ys = [4, 7] ; 
Xs = [1, 4], 
Ys = [7] ; 
Xs = [1, 4, 7], 
Ys = [] ; 
false. 

당신이 library(clpfd) 같은 제약 작업 할 때 그것은 더욱 유용

?- use_module(library(clpfd)). 
true. 

?- X #> 3, X#>=Y,abs(X) #< 100. 
X in 4..99, 
X#>=Y, 
Y in inf..99. 

다른 문제 많은 시스템에서 공통 기본 동작은 다음과 같습니다하는 조항과 다른 대한 언급의가없는 경우 특정 술어의 경우, 시스템은 사용자가 이름을 잘못 입력했다고 가정하고 이에 따라 오류를 제공합니다. 정말로 고집한다면 (하지 마세요!) set_prolog_flag(unknown, fail).으로 1970 년대 후반으로 여행하는 행동 시간을 전환 할 수 있지만 set_prolog_flag(unknown, error)으로 즉시 전환하는 것이 좋습니다.