Dinaminė žinių bazė Spausdinti
( 1 Vote )
Parašė Aurimas Šimkus   

Vienas žinių bazės pildymo variantas - faktus ir taisykles (procedūras) rankiniu būdu rašyti tekstiniame faile. Šiuo atveju procedūros yra statinės (nekintančios), jei nenurodoma kitaip. Didžiausias tokio būdo trūkumas - praktiškai negalima modifikuoti šios žinių bazės programos vykdymo metu. Kitas bazės pildymo būdas - dinaminis. Prolog kalboje yra integruota daug predikatų, iš kurių viena grupė skirta kurti dinaminėms žinių bazėms. Tokiu atveju procedūras galima kurti ir trinti programos vykdymo metu. Šitokią žinių bazę taip pat galima išsaugoti faile ir paskui ją atkurti.

PS žinių bazių tvarkymas gali šiek tiek skirtis priklausomai nuo interpretatoriaus. Šioje pamokoje pateikiama teorija ir pavyzdžiai yraq skirti SWI-Prolog interpretatoriui. 

 

Dinaminių termų (procedūrų, faktų) kūrimas 

Pagrindiniai predikatai dinaminių termų kūrimui yra šie:

  • asserta(X) - termas X įterpiamas žinių bazės pradžioje,
  • assertz(X) - termas X įterpiamas žinių bazės pabaigoje.

Anksčiau buvo naudojamas predikatas assert, kuris yra assertz sinonimas ir šiuo metu naudojamas retai. Termas X gali būti tiek faktas, tiek procedūra. Jis skliaustuose užrašomas visas, bet taškas jo gale nededamas.

Procedūros sukūrimo pavyzdys:

assert( ar_karsta(T) :- T>30 ).

 

Dinaminių termų naikinimas

Pagrindiniai predikatai dinaminių termų naikinimui yra šie:

  • abolish(F,L) - naikina tiek dinaminius, tiek statinius(! iki kito užkrovimo) termus. F - termo funktorius (pavadinimas), L - laipsnis (parametrų skaičius).
  • retract(T) - naikina pirmą rastą termą T (turi būti parašytas visas termas).
  • retract_all(T) - naikina visus rastus termus T. 

Variantrai, parodantys, kaip sunaikinti prieš tai susikurtą termą ar_karsta:

abolish( ar_karsta, 1 ).
retract( ar_karsta(T):-T>30 ).
retract_all( ar_karsta(T):-T>30 ).