6
votes

Swi Prolog, déchargement de fichiers source

Y a-t-il un prédicat intégré ou un moyen facile de supprimer de la base de données de connaissances de PRALOG sur les fichiers source déjà consultés? J'ai traversé le manuel de référence et je n'ai trouvé aucune chose qui pourrait le faire.


0 commentaires

4 Réponses :


4
votes

Vous pouvez le faire avec ces procédures qui utilisent source_file / 1 et source_file / 2 : xxx

déchargement_source / 1 abolit tous les prédicats définis par le nom du fichier source d'entrée. Soyez averti qu'il doit être un chemin absolu.

nonchart_last_source / 0 récupérera le dernier nom de fichier consulté et le déchargera.


2 commentaires

Il y a plusieurs implémentations de Prolog. L'OP ne fait aucune mention du (s) système (s) de PROG qu'il utilise. Cette solution fonctionne sur Swi-Prolog. Il ne fonctionnera pas dans la plupart des autres compilateurs de prologiques qui ne fournissent pas les prédicats source_file / 1-2 intégrés et / ou permettent de supprimer les prédicats statiques. Les solutions dépendantes d'une mise en œuvre de PRAGolog particularité sont mieux explicitement marquées comme telles.


@Paulo Moura: L'OP a étiqueté la question comme spécifique Swi-Prolog. La réponse manquait plutôt de noter que les œuvres abolissantes sans comptabilisation du fichier source ...



1
votes

Une fois qu'un fichier a été consulté, il devient «non pertinent» à PRolog. Donc, je pense que cela devrait généralement répondre devrait être non fort>. Mais Swi-Prologg a un ensemble riche de produits qui vous permet de contrôler votre prolgramme. Par exemple,

?- clause(strip_spaces(_G297, _G298),X,Y),erase(Y).
ERROR: erase/1: No permission to clause erase `<clause>(0x29acc30)'


0 commentaires

0
votes

Si vous connaissez le nom du prédicat, par exemple faits / 2, vous pouvez utiliser: xxx


2 commentaires

S'applique uniquement aux prédicats dynamiques, c'est-à-dire défini avec affirmer , non?


En effet, il ne s'applique qu'aux prédicats dynamiques, mais ils ne doivent pas nécessairement avoir été affirmés au moment de l'exécution, les peuvent également avoir été déclarés dans le fichier source.



0
votes

Cela fonctionnera.

nonchart_file (+ fichier)

Supprimer toutes les clauses chargées du fichier. Si le fichier chargé un module, effacer La liste d'exportation du module et le dissocier du fichier. Le fichier est un Nom de fichier canonique ou indicateur de fichier valide pour load_files / 2. Ce prédicat doit être utilisé avec soin. La nature multithread de SWI-PROGL fait enlever le code statique dangereux. Tente de faire cela devrait être réservé au développement ou à des situations où l'application peut garantir qu'aucune des clauses associées au fichier n'est active.


0 commentaires