Dinamikus adatbáziskezelő beépített eljárások

A VIK Wikiből

Ez az oldal a korábbi SCH wikiről lett áthozva.

Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!

Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.


  • fejezetek: 4.11, 5.3
  • fóliák: 245-251

4.11. Dinamikus adatbáziskezelés

A Prolog lehetővé tesz, hogy az ún. dinamikus eljárásokat futási időben módosítsuk (hozzáadjunk illetve elvegyünk klózokat). A dinamikus eljárásokat a

:- dynamic(Név/Argszám).

deklaráció vezeti be, ennek az adott eljárás klóza előtt kell szerepelnie.

4.11.1, 5.3. Beépített eljárások

  • =asserta(:@Klóz)= és =assertz(:@Klóz)=:

Elsőnek illetve utolsónak veszi fel a predikátumba az újonnan definiált Klóz-t.

| ?- assertz((p(1,X) :- q(X))), asserta(p(2,0)),
	  assertz((p(2,Z) :- r(Z))), listing(p).
p(2, 0).
p(1, A) :- q(A).
p(2, A) :- r(A).
	  
  • =retract(:@Klóz)=:

Megkeresi és törli az első olyan dinamikus klózt melynek van a Klózzal egyesíthető klóza. Visszalépés esetén folytatja a keresést. Pl.:

:- listing(p), retract((p(2, _) :- _)), listing(p), fail.
p(2, 0).			  | p(1, A) :- q(A).	| p(1, A) :- q(A).
p(1, A) :- q(A).	| p(2, A) :- r(A).	|
p(2, A) :- r(A).	|						  |
		
  • =retractall(:@Fej)=:

Az összes klózt melynek feje illeszkedik a Fej-jel törli. Mindig sikerül, még akkor is, ha nem törölt ki semmit.

  • =clause(:@Fej, ?Törzs)=:

Hívásakor megkeresi és illeszti a Fej:-Törzs alakú klózokat. Pl.

:- listing(p), clause(p(2, 0), T).
p(2, 0).			  | T = true ? ;
p(1, A) :- q(A).	| T = r(0) ? ;
p(2, A) :- r(A).	| no
		
  • =abolish(Funktor)=:

Törli a megadott nevű és argumentumszámú klózokat. A funktort Név/Aritás formában várja, ahol a Név egy atom és az Aritás egy egész.

  • =current_predicate(Funktor)=:

Igaz, ha létezik Név/Aritás alakú eljárás, és a Név/Aritás egyesíthető a Funktor-ral. Többszörösen sikerülhet.