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.
[프롤로그 -/주장 번만 데이터베이스를 만드는 방법]의
가능한 중복 (http://stackoverflow.com/questions/10437395/prolog-how-to-assert-make-a-database-only -once) –
어쩌면 저 질문이 저에게 요구 되었기 때문에. 프로그램이 종료 될 때마다 저장된 모든 내용을 지울 필요가 있습니다. 그것은 PROLOG가 종료 할 때마다 필요한 것을 만족시킵니다. 그러나 그것은 내가 필요한 것이 아닙니다. : ( – HungryCoder