2017-11-04 7 views
3

나는 프롤로그의 기초를 배우고 다음 코드를 사용하여 exist_error를 계속 실행하려고합니다. 기본 예제의 프롤로그 존재 오류

comes_after(m1, m2). 
comes_after(m2, m3). 
comes_after(m3, m4). 
comes_after(m4, m5). 
comes_after(m5, m6). 

does_come_after(X, Y) :- comes_after(X, Y). 
does_come_after(X, Z) :- comes_after(X, Y), does_come_after(Y, Z). 

같은 does_come_after 같은 쿼리를 실행 (M1, M3) 나는 다음과 같은 오류가 계속.

Prolog Error

내가 잘못 뭐하는 거지

, 내가 마음에 무엇을 보관해야 미래에 이러한 오류를 방지하기 : 여기

uncaught exception: error(existence_error(procedure,comes_after/0),does_come_after/0) 

이 스크린 샷은 오류를 보여주는거야? 미리 감사드립니다.

+0

은 괜찮아 보인다. 그러나이 오류가 발생해서는 안됩니다. 어떻게 그 논리를 정확히 부르셨습니까? – Xaser

+0

술어가 들어있는 파일을 참조하지 않은 것으로 보입니다 ... – coder

+0

나는 파일을 참조했고 came_after() 선언문을 사용하여 테스트했습니다. 게시물을 업데이트하고 스크린 샷에서 세부 사항을 확인하십시오. 감사! – Zoroshino

답변

3

오류 메시지는 Prolog가 술어 comes_after/0을 필요로하지만 아무것도 찾을 수 없다는 것을 알려줍니다. 또한이 문제는 술어 does_come_after/0에서 호출 될 때 발생합니다. 자, 정의는 모두 2를 사용합니다. 따라서 comes_after/2does_come_after/2. 시스템이 기대하는 것은 일어나지 않습니다.

그렇다면 설치와 관련이 있어야합니다. 가장 최근 버전 인 1.4.5, 안정적인 현재 안정된 1.4.4가 있습니다.

이렇게하면 호환되지 않는 pl2wam 컴파일러를 제공하여 다른 이전 시스템을 설치할 수 있습니다. 이를 확인하려면 which pl2wam 또는 pl2wam --version이라고 말하십시오.

특히 1.3 또는 1.2의 버전이 그러한 결과를 생성 할 수 있습니다. 이것에 대한 버전 검사는 GNU에서하지 않습니다.

내가 항상 옳은 버전을 얻을 수 있도록하기 위해, 나는 말 : does_come_after의 논리는 아마 조금 결함이 있지만

export PATH=/opt/gupu/gprolog-1.4.5/bin:${PATH} 
+1

네, 버전에 대해 당신이 맞다고 생각합니다. 다른 사람들도 같은 문제가있는 것 같습니다 : http://lists.gnu.org/archive/html/users-prolog/2017-02/threads.html 1.4.4로 다운 그레이드되어 해결 된 것 같습니다. 문제! – Zoroshino

+0

@Zoro : 업데이트 됨 – false