문제

궁금해, 나는 당신이 사용할 수 있다는 것을 알고 있습니다. assert 술어를 선언 한 경우 사실이나 규칙을 추가하거나 -:dynamic, 그러나 이것은 해당 세션에서만 변경 될 수있는 변경 만 허용합니다. 예를 들어 Prolog 창을 닫으면 데이터베이스 변경이 손실됩니다.

그래서 나는 궁금했다. assert 그리고 retract Predicates는 Prolog .PL 파일을 영구적으로 변경할 수 있습니까?

감사

도움이 되었습니까?

해결책

나는 당신에게 이것을하는 매우 간단한 방법을 제안 할 수 있습니다.

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.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top