2012-05-03 4 views
1
:-dynamic listofQuestions/2. 
myrule:- 
    write('P = '), write(Percent), write('-'),write(X), 
    (listofQuestions(Percent,X) -> true ; assert(listofQuestions(Percent,X))), 

코드 단편은 내 질문에 대답하지 않아도됩니다.Prolog - 새 데이터베이스로 주장하십시오

나는 규칙을 호출 할 때마다 빈 'listofQuestions'를 주장하고 싶다. 이것은 프롤로그 창을 닫고 다시 시작할 때만 발생합니다.

제안 사항?

+0

가능한 중복 (http://stackoverflow.com/questions/10437395/prolog-how-to-assert-make-a-database-only -once) –

+0

어쩌면 저 질문이 저에게 요구 되었기 때문에. 프로그램이 종료 될 때마다 저장된 모든 내용을 지울 필요가 있습니다. 그것은 PROLOG가 종료 할 때마다 필요한 것을 만족시킵니다. 그러나 그것은 내가 필요한 것이 아닙니다. : ( – HungryCoder

답변

4

abolish/1은 주어진 조건 자의 모든 절을 데이터베이스에서 제거합니다. 따라서이 술어에 대한 정보를 제거해야 할 때마다 abolish(PredName/Arity)에 대한 호출을 추가하십시오. 폐지 한 후에는 동적 조건부에 대한 호출이 실패하지는 않지만 오류가보고됩니다. 프롤로그 플래그 iso가 true로 설정되어 있지 않으면 SWI - 프롤로그에서

12 ?- f(X,Y). 
false. 

13 ?- assert(f(a,b)). 
true. 

14 ?- f(X,Y). 
X = a, 
Y = b. 

15 ?- abolish(f/2). 
true. 

16 ?- f(X,Y). 
ERROR: user://2:67: 
     toplevel: Undefined procedure: f/2 (DWIM could not correct goal) 

, 정적 절차에 abolish 작품. 동적 조건자를 제거하려는 경우 retractall을 시도해보십시오. 이 경우 제거는 오류가보고되지는 않지만 실패로 이어질 수 있습니다.

17 ?- [user]. 
:- dynamic f/2. 
|: 
% user://3 compiled 0.00 sec, 264 bytes 
true. 

18 ?- f(X,Y). 
false. 

19 ?- assert(f(a,b)). 
true. 

20 ?- f(X,Y). 
X = a, 
Y = b. 

21 ?- retractall(f(X,Y)). 
true. 

22 ?- f(X,Y). 
false. 
[프롤로그 -/주장 번만 데이터베이스를 만드는 방법]의
+0

고마워. 폐지/2 작업 했어. – HungryCoder