2016-11-05 5 views
1

저는 프롤로그를 처음 접했습니다. SICStus를 사용하여 이미 문의 한 파일을 변경하면 SICStus는 변경 내용을 인식하지 못합니다. 창문을 닫고 다시 시작하는 유일한 방법은 나를위한 것입니다. 그러나 분명히 이것은 파일을 변경할 때마다 창을 닫을 때 짜증나는 것이 아니라 시간 낭비라는 점에서 실용적이지 않습니다. 나는 Windows 버전 인 Sicstus 4.2.1을 사용하고 있습니다. 지금까지 나는 consult (file), reconsult (file), compile (file)과 같은 명령을 시도했지만 차이점을 찾지 못했습니다. SICStus는 창을 닫고 열 때까지 변경된 내용을 무시합니다.SICStus Prolog가 변경을 무시합니다.

예를 들어, 술어 test/2가 있다고 가정 해보십시오. 그런 다음 파일을 삭제하고 파일을 저장했습니다. 그런 다음 reconsult (file)를 입력합니다. 내 기대는 SICStus가 변경 사항을 인식하고 술어가 존재하지 않는다고 말합니다. 그러나 그것이 존재하는 것처럼 계속됩니다. 창을 닫고 처음부터 다시 시작해야만 술어가 존재하지 않는다는 것이 옳다고 불평 할 것입니다.

이상하게도 reconsult (파일)가있는 새로 추가 된 조건자를 인식하지만 변경되거나 삭제 된 경우에는 그렇지 않습니다.

+0

관련 항목 : [SICStus 용 기능 만들기] (http://stackoverflow.com/q/34558948/772868). – false

+2

reconsult (file)는 절을 추가하거나 제거하는 경우와 같이 술어에 대한 변경 사항을 인식해야합니다. 그게 너 한테 무슨 일이 아니니? 추신. [SICStus IDE] (https://sicstus.sics.se/spider)에서 버튼을 눌러 SICStus 최상단을 다시 시작할 수 있습니다. –

+0

내 경우에는 그렇지 않습니다. reconsult는 변경 사항을 전혀 인식하지 못합니다. – Enigma

답변

1

consult/1, reconsult/1'.'/2 — 먼저 1970ies 1에 정의 된 모든 기존의 내장 기능입니다. 오늘 그들은 단지 빠르고 더러운 편집을위한 것입니다. 이러한 구조의 의미는 (실제로는 아직까지도) 의미가 있기 때문에 표준화를위한 준비가되어있는 깨끗한 의미에 동의하는 것은 불가능합니다. 그리고 당신은 그 약점 중 하나를 지적했습니다. 예, 일단 정의되면 암시 적으로 술어를 정의 해제 할 수 없습니다. SICStus의 특정 구현 abolish/2을 사용하여 술어를 삭제하십시오.

일반적으로 ensure_loaded/1 대신에 파일 수정 날짜가 변경되었는지 확인하기 위해 대신 사용하십시오. 이것을 사용하는 좀 더 일반적인 방법은 make.을 발행하는 것입니다. 그러나 다시 한번, 특정 변경 사항이 제대로 고려되지 않았 음을 경고하십시오. 변경된 파일을 다시로드하려면 여전히 make.을 사용하십시오.

가장 깨끗한 방법은 모듈을 사용하는 것입니다, 거기에 다시 인터페이스의 변화가 제대로 대신에, 어떤 경고가 발행 고려되지 않습니다

| ?- use_module(modulefile). 
% compiling /home/ulrich/SO/modulefile.pl... 
* predicate test/2 imported by user from modulefile is private 
* Approximate lines: 1-2, file: '/home/ulrich/SO/modulefile.pl' 
% module modulefile imported into user 
% compiled /home/ulrich/SO/modulefile.pl in module modulefile, 0 msec 2768 bytes 
yes 

1 내가 최초의 문서 1978-09의 DECsystem-10 Prolog에 대한 사용자 안내서를 알고 있습니다. 정오표가있는 1978-10 버전은 here입니다.