Vermeiden der Verwendung von Assert und Retractall in Prolog zum Implementieren globaler (oder Status-) Variablen

Oft schreibe ich Code in Prolog, der einige arithmetische Berechnungen (oder Statusinformationen, die für das gesamte Programm wichtig sind) beinhaltet, indem ich zuerst den in einem Prädikat gespeicherten Wert erhalte, dann den Wert neu berechne und schließlich mit speichereretractall undassert weil wir in Prolog der Variablen mit nicht zweimal Werte zuweisen könnenis (Dadurch wird fast jede Variable, die geändert werden muss, global). Ich habe erfahren, dass dies in Prolog keine gute Praxis ist. In diesem Zusammenhang möchte ich fragen:

Warum ist es eine schlechte Übung in Prolog (obwohl ich selbst die oben genannten Schritte nicht gerne durchführe, nur um eine Art flexible (veränderbare) Variable zu haben)?

Was sind einige allgemeine Möglichkeiten, um diese Praxis zu vermeiden? Kleine Beispiele werden sehr geschätzt.

P.S. Ich habe gerade angefangen, Prolog zu lernen. Ich habe Programmiererfahrung in Sprachen wie C.

Bearbeitet zur weiteren Verdeutlichung

Ein schlechtes Beispiel (in Win-Prolog) für das, was ich sagen möchte, ist unten angegeben:

:- dynamic(value/1).
:- assert(value(0)).

adds :- 
   value(X),
   NewX is X + 4,
   retractall(value(_)),
   assert(value(NewX)).

mults :-
   value(Y),
   NewY is Y * 2,
   retractall(value(_)),
   assert(value(NewY)).

start :-
   retractall(value(_)),
   assert(value(3)),
   adds,
   mults,
   value(Q),
   write(Q).

Dann können wir abfragen wie:

?- start.

Hier ist es sehr trivial, aber in einem realen Programm und einer realen Anwendung wird die oben gezeigte Methode der globalen Variablen unvermeidlich. Manchmal gefällt die oben angegebene Listeassert(value(0))... wächst sehr lange mit viel mehr Assert-Prädikaten zum Definieren von mehr Variablen. Dies geschieht, um die Kommunikation der Werte zwischen verschiedenen Funktionen zu ermöglichen und um Zustände von Variablen während der Laufzeit des Programms zu speichern.

Abschließend möchte ich noch eines wissen: Wann ist die oben erwähnte Praxis trotz verschiedener von Ihnen vorgeschlagener Lösungen zur Vermeidung unvermeidbar?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage