2010-03-12 4 views
23

나는 -:dynamic이라는 술어를 선언 한 경우 assert을 사용하여 사실이나 규칙 또는 기타를 추가 할 수 있다는 것을 알고 있습니다. 그러나이 변경 사항은 그 안에 보관되도록 허용됩니다. 세션 전용, 예. 프롤로그 창을 닫으면 데이터베이스 변경 사항이 손실됩니다.Prolog - ASSERT and RETRACT

궁금한데, assertretract 술어가 Prolog .pl 파일을 영구적으로 변경할 수 있도록 만드는 방법이 있습니까?

감사합니다.

답변

37

이 작업을 수행하는 방법은 매우 간단합니다.

1 ?- assert(a(1)). 
true. 

2 ?- assert(a(2)). 
true. 

3 ?- assert(a(3)). 
true. 

4 ?- a(A). 
A = 1 ; 
A = 2 ; 
A = 3. 

5 ?- tell('a_db.txt'), listing(a), told. 
true. 

그런 다음 세션을 닫고 다시 엽니 다.

1 ?- a(A). 
ERROR: toplevel: Undefined procedure: a/1 (DWIM could not correct goal) 
2 ?- ['a_db.txt']. 
% a_db.txt compiled 0.00 sec, 516 bytes 
true. 

3 ?- a(A). 
A = 1 ; 
A = 2 ; 
A = 3. 

4 ?- listing(a). 
:- dynamic a/1. 

a(1). 
a(2). 
a(3). 

true. 
+2

감사합니다, 작동하는 것 같습니다. 가능한 경우 기본 디렉토리 대신 특정 디렉토리를 가리킬 수 있는지 궁금합니다. 물론 tell 명령을 사용할 때, – KP65