2013-06-03 1 views
0

Fedora 17 Linux 시스템에서 gprolog 버전 1.4.2를 실행하고 있습니다.gprolog include 지시문이 작동하지 않습니다.

나는 잘 실행되는 작은 프롤로그 프로그램을 작성했습니다. 필자는 다른 프롤로그 프로그램에서 끌어 올리고 사용하고자하는 몇 가지 조건을 정의했습니다. 그래서 나는 그것들을 별도의 파일에 넣고 include 지시어 (버전 1.4.2 GNU Prolog 매뉴얼의 초 7.1.8에 정의 됨)를 사용한다고 생각했다. 그러나 작동하지 않았습니다. gprolog은 포함 된 파일에있는 해당 술어가 정의되지 않았다고 말했습니다.

는 그래서 gprolog 프롬프트에서 내가 입력 :

| ?- include('tools.pro'). 

내가 얻을 :

uncaught exception: error(existence_error(procedure,include/1),top_level/0 

그래서 그것을 명확하게 지시를 인식하지 못합니다. 나는 모든 것을 수색했는데 왜 이런 일이 일어나야하는지 알지 못합니다. 이것에 대한 어떤 생각?

답변

1

include/1지시 아닌 술어입니다. GNU Prolog는 공식 표준을 철저히 준수하므로 최상위 쿼리를 포함하여 include/1을 술어로 사용할 수 없습니다. Sergey가 설명했듯이 프로그램을로드하려는 경우 기본 제공 술어 consult/1 또는 해당 바로 가기 ([Fie1, File, ...])를 사용할 수 있습니다.

원본 파일에서 include/1 지시문을 사용하려면 앞에 (:-)/1 연산자를 씁니다. 예 :

:- include('tools.pro'). 
+0

Paulo에게 감사드립니다. 그 일은 훌륭했습니다. 나는 '지시어'대 '술어'설명을 놓쳤다. 나는 그것을 사용하는 방법을 예제 또는 설명을 찾을 수 없습니다. 지금 당장 나를위한 유일한 수수께끼는 GNU 프롤로그 매뉴얼에서 말하는 것입니다 : "발견되지 않으면 부모 includers의 각 디렉토리에서 이 검색됩니다." '부모 includers'가 무엇을 말하는지 잘 모르겠습니다. – lurker

+0

반갑습니다. "부모 includers"에 관한 귀하의 질문에 관해서는, 파일이 다른 파일을 포함하는 파일을 포함하는 시나리오를 언급한다고 가정합니다. –

0

include/1은 Prolog 소스 파일에서 사용하기위한 것입니다. 당신은 아마 당신의 소스 파일을 참조 할 쿼리 프롬프트에서

는 : ['tools.pro'].는 ISO 프롤로그 표준에 지정된대로

+0

감사합니다. 그게 나에게 일어난 일이지만, include로 프로그램을 컴파일하려고 시도했지만 여전히 그 술어를 찾을 수 없다고 불평했다. – lurker

+0

내 원래의 문제는 컴파일 된 프로그램에서 include가 인식되지 않는다는 것입니다. 나는 그것을 테스트 할 때 수동으로 실행했다. 당신의 대답은 왜 수동 테스트가 작동하지 않는지를 설명합니다. 하지만 내 원래의 문제는 여전히 불행히도 존재합니다. – lurker

+0

'include/1'가 사용되는 Prolog 소스 파일을 보여줄 수 있습니까? –