Prolog: come cancellare la memoria e ricominciare da capo?
-
29-10-2019 - |
Domanda
Sto sviluppando un algoritmo in un file .pl e lo sto esaminando con query nella finestra di comando. Uso variabili dinamiche e ritirare / affermare predicati.E quando modifico il file pl e faccio clic su "ricarica i file modificati", ho altre informazioni che non voglio.
per esempio, all'inizio l'ho fatto contatore (0).
e faccio qualcosa, ritiro e asserisco questo contatore, diventa contatore (7).Quindi, quando ricarico il file pl modificato, ho entrambi contatore (0).e counter (7).
Come posso impedirlo e avere solo counter (0).all'inizio?
Grazie in anticipo.
Soluzione
Inserisci
:- abolish(counter/1).
all'inizio del file.Quando avrai terminato il test, rimuovilo.
Altri suggerimenti
Se utilizzi questi fatti dinamici solo per implementare i contatori, dovresti pensare se questo è il modo migliore per farlo.L'uso di assert/1
e retract/1
rende il codice piuttosto lento.
È possibile rendere la variabile counter un altro argomento del predicato che si passa nel codice (potrebbe essere necessario distinguere tra input e output, quindi avere due argomenti aggiuntivi) o utilizzare variabili globali (che sono caratteristiche non logiche,tuttavia, che a volte è impossibile).
Dipende dal sistema che stai utilizzando.In YAP, B, GNU, SICStus, il
la direttiva :- dynamic(counter/1).
ha questo effetto.Cioè, solo il file
i fatti del file sono presenti dopo il ricaricamento.
In SWI, i predicati dinamici vengono conservati mentre descrivi.Devi rimuoverli direttamente con retractall/1
che conserva le informazioni che il predicato è dinamico.