Question

Je développe un algorithme dans un fichier .pl et je l'examine avec des requêtes sur la fenêtre de commande. J'utilise des variables dynamiques et rétracte / affirme les prédicats. Et lorsque je modifie le fichier PL et clique sur "Recharger les fichiers modifiés", j'ai des faits supplémentaires que je ne veux pas.

Par exemple, au début, j'ai un compteur (0).

Et je fais quelque chose, rétracte et affirme ce compteur, il devient compteur (7). Ensuite, lorsque je recharge le fichier PL modifié, j'ai les deux compteur (0). et compteur (7).

Comment puis-je empêcher cela et avoir uniquement un compteur (0). au début?

Merci d'avance.

Était-ce utile?

La solution

Insérer

:- abolish(counter/1).

au début de votre fichier. Lorsque vous aurez fini de tester, retirez-le.

Autres conseils

Si vous n'utilisez que ces faits dynamiques pour implémenter des compteurs, vous devez vous demander si c'est la meilleure façon de le faire. Utilisant assert/1 et retract/1 fait du code plutôt lent.

Vous pouvez soit faire de la variable de compteur un autre argument de prédicat que vous transmettez dans votre code (vous devrez peut-être faire la distinction entre l'entrée et la sortie, donc deux arguments supplémentaires), soit utiliser des variables globales (qui sont des caractéristiques non logiques, qui, cependant, qui, cependant c'est parfois un non-go).

Cela dépend du système que vous utilisez. Dans Yap, B, GNU, Sicstus, la directive :- dynamic(counter/1). a cet effet. Autrement dit, seuls les faits du fichier sont présents après le rechargement.

Dans SWI, les prédicats dynamiques sont conservés comme vous le décrivez. Vous devez les supprimer directement avec retractall/1 qui conserve les informations que le prédicat est dynamique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top