Assert in retract

Iz E-študij, proste zakladnice študentskega znanja

Skoči na: navigacija, iskanje
Assert
doda svojo vsebino v trenutno prologovo bazo znanja.
asserta - na začetek
assertz - na konec
Retract
pobriše vsebino iz baze znanja.
?- lepo.
no
?- assert((lepo :- soncno)), assert(soncno).
yes
?- lepo.
yes
yes
?- soncno.
yes
?- asserta((lepo :- soncno)).
yes
?- lepo.
yes
?- retract(soncno).
yes
?- lepo.
no
?-       

?- retract(otrok(X,Y)).
X = metka
Y = tone;
X = tine
Y = tone;
no

otrok(X,tone).
no 

Dodajanje dejstev

Spreminjanje vrednosti
spremeni(Ime,Nova_vr) :-
  retract(vrednost(Ime,_)),
  assert(vrednost(Ime,Nova_vr)).
Shranjevanje že izračunanih vrednosti
ni_pras(X) :-  %ugotovi če število ni praštevilo - slaba verzija
  med(1,X,N),
  med(1,X,M),
  X is M*N.

med(Min,Max,X) :-
  X is Min+1,
  X < Max.
med(Min,Max,X) :-
  Min1 is Min + 1,
  Min1 < Max - 1,
  med(Min1,Max,X).
?- med(1,4,X).
X = 2;
X = 3;
no

ni_pras_ucinkovito(X) :-   %izboljšana verzija
  med(1,X,N),
  med(1,X,M),
  X is M*N,!,
  asserta(ni_pras_ucinkovito(X)).  %doda rešitev na začetek programa
ni_pras_ucinkovito(X) :-
  asserta((ni_pras_ucinkovito(X) :- !,fail)),   %doda negativno rešitev
  !,
  fail.   %da dobimo končni odgovor "no"
  
Shranjevanje rezultatov v seznam

Procedura zberi shrani podatke v podatek().

podatek(a).
podatek(b).
podatek(c).
podatek(konec).  %konec baze podatkov

?- zberi(S).
S = [c,b,a].
[]
[a]
[b,a]
[c,b,a]
zberi(Seznam):-
  zberi1(Seznam,[]).

zberi1(Seznam,Rtenutni) :-
  retract(podatek(Podatek)),
  (Podatek = konec, ! , Seznam = Trenutni;
  zberi1 (Seznam, [Podatek|Trenutni])).


findall(X,Cilji,Seznam)

zbere v Seznam vse vrednosti X, za katere so Cilji izpolnjeni

findall(X,Cilji,S) :-
  asserta(podatek(konec)),
  call(Cilji),
  asserta(podatek(X)),
  fail.
findall(_,_,S) :-
  zberi(S).

?- Cilji(X).
X = X1;
X = X2;
X = X3;
no
findall(X,Cilji(X),S).
S = [X1,X2,X3].
Osebna orodja
Imenski prostori
Različice
Dejanja
navigacija

Tiskanje/izvoz
orodja