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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top