Frage

Ich entwickle einen Algorithmus in einer .PL-Datei und untersuchen Sie sie mit Abfragen im Befehlsfenster. Ich verwende dynamische Variablen und ziehen / behaupten / geltend machen.Und wenn ich die PL-Datei ändern und auf "Modifizierte Dateien neu laden" klicken, habe ich zusätzliche Fakten, die ich nicht will.

Beispielsweise habe ich am Anfang Zähler (0).

Und ich tue etwas, ziehe diesen Zähler zurück, wird es Zähler (7).Wenn ich dann die modifizierte PL-Datei neu laden, habe ich beides Zähler (0).und Zähler (7).

Wie kann ich das verhindern und nur den Zähler (0) haben?Am Anfang?

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Einfügen

:- abolish(counter/1).

am Anfang Ihrer Datei.Wenn Sie mit dem Testen fertig sind, entfernen Sie es.

Andere Tipps

Wenn Sie diese dynamischen Fakten nur zum Implementieren von Zählern verwenden, sollten Sie sich überlegen, ob dies der beste Weg ist, dies zu tun.Die Verwendung von assert/1 und retract/1 führt zu einem ziemlich langsamen Code.

Sie können entweder die Zählervariable zu einem anderen Prädikatargument machen, das Sie in Ihrem Code weitergeben (möglicherweise müssen Sie zwischen Eingabe und Ausgabe unterscheiden, also zwei zusätzliche Argumente haben) oder globale Variablen verwenden (die nicht logische Merkmale sind).Dies ist jedoch manchmal ein No-Go.

Es hängt davon ab, welches System Sie verwenden.In YAP, B, GNU, SICStus, der Die Richtlinie :- dynamic(counter/1). hat diesen Effekt.Das heißt, nur die Fakten aus der Datei sind nach dem erneuten Laden vorhanden.

In SWI bleiben die dynamischen Prädikate wie beschrieben erhalten.Sie müssen sie direkt mit retractall/1 entfernen, der die Information beibehält, dass das Prädikat dynamisch ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top