next up previous contents
Next: Interface utilisateur Up: Quelques prédicats utiles en Previous: Traitement des erreurs

Bases de données

Voici quelques prédicats à utiliser en complément des bases de données de Prolog.

SWI-Prolog offre 3 types de bases de données. Nous ne considérerons ici que l'espace des clauses Prolog et le mécanisme record. Dans la distribution originale de Prolog, il manque des prédicats pour la remise à zéro d'une base de données. Pour cela, on introduit deux prédicats : empty_db/1 efface toutes les entrées de la base de données enregistrées sous une clé donnée et empty_module/1 supprime toutes les clauses contenues dans un module particulier.

Exemple :

empty_db(ma_cle).
empty_module(mon_module).

Un module doit pouvoir être réinitialisable. Un module réinisialitable contient un prédicat dynamique (init/0). Pour réinitialiser tous les modules, on appelle le prédicat reinit/0. Ce predicat extrait toutes les clauses init/0 de tous les modules et les appelle.

Exemple :

% dans un module
init :-empty_db(cle).

% module principal
reinit.

La puissance de Prolog vient de l'unification et du backtrack. Cependant tous les prédicats ne sont pas défaisables. C'est le cas en particulier de assert et retract. Parfois on a besoin de supprimer des clauses qui ont été assertée dans une branche qui échoue. Les prédicats rasserta/1, rassertz/1, rretracta/1, rretractz/1 possèdent un tel comportement.

Exemple :

?-rassertz(foo),fail ;foo.

No

<< foo >> est asserté puis rétracté.


next up previous contents
Next: Interface utilisateur Up: Quelques prédicats utiles en Previous: Traitement des erreurs
Christophe Delord
1998-09-02