2011-04-26 1 views
2

프롤로그 프로그램에서 얻은 모든 솔루션을 파일로 작성하려면 어떻게합니까?gprolog의 파일에 쓰기

+0

사실, 정말 가까운 질문이 있습니다. 자세한 대답은 http://stackoverflow.com/questions/4736384/writing-in-file-swi-prolog-windows –

답변

4

짧은 답은 솔루션이 파일에 쓰여진 마지막 두 번째 단계에서 반복/실패 루프 내에 "솔루션"술어에 대한 호출을 중첩하는 것입니다.

어떤 종류의 솔루션이 관련되어 있는지에 대한 세부 정보가 부족하기 때문에 (예 : 작성된 파일을 다시 읽지 못하도록 하나 이상의 용어를 재구성 할 수 있어야하는 경우) 어떤 시점에서) 솔루션이 정수일 뿐인 간단한 그림부터 시작해 보겠습니다.

mySolution(X) :- for(X,1,10). 

/3에 대한 GNU 프롤로그에 대한 기본 조건입니다 :

우리는 다음과 같은 비 결정적 조건이있다. SWI-Prolog는 /3 사이에 유사한 술어 과 Amzi! Prolog는/4에 대해 을 가지고 있으며 추가 인수는 +1 이외의 값이 될 수 있습니다. 사용자 구현은 다음과 같습니다 목표 mySolution(X)이 방법의 예측 유한 수에 성공

for(Low,Low,High) :- Low =< High. 
for(New,Low,High) :- 
    Now is Low + 1, 
    Now =< High, 
    for(New,Now,High). 

하도록.

파일 출력은 GNU-Prolog의 스트림 기능을 사용하거나 콘솔 출력의 명령 줄 재 지정을 수행하여 수행 할 수 있습니다. 많은 경우에있어서 두 번째 것이 더 간단하고 융통성이 있지만 첫 번째 가능성을 설명 할 것입니다. 많은 프롤로그 구현처럼

main :- 
    open('myOutput.txt',write,ID), 
    ( (mySolution(X), write(ID,X), nl(ID), fail) 
     ; close(ID) 
    ). 

은 GNU - 프롤로그는 쓰기 술어의 여러 스트림이 아닌 스트림 변종을 제공합니다, 당신은 here the relevant documentation을 찾을 수 있습니다. 개봉닫기this linkthat link을 확인하십시오.

추가 : 나는 출력 파일에 솔루션을 분리하는 NL/1 호출에 던졌다.

+0

+1입니다. 정말 유용합니다 –

+0

@hardmath :'mySolution (N)'은 끝나지 않고 인수로서 유효한 표현식을 가진 어떤 지상 목표도하지 않습니다. 따라서 파일은 절대로 닫히지 않습니다. – false

+0

@false : 잘 했어, 고칠거야! – hardmath