Pergunta

Estou desenvolvendo um algoritmo em um arquivo .pl e examinando-o com consultas na janela de comando. Eu uso variáveis dinâmicas e retraio / declaro predicados.E quando eu modifico o arquivo pl e clico em "recarregar arquivos modificados", eu tenho fatos extras que não quero.

por exemplo, no começo eu tenho contador (0).

e eu faço algo, retiro e declaro este contador, ele se torna o contador (7).Então, quando eu recarregar o arquivo pl modificado, eu tenho ambos contador (0).e contador (7).

Como posso evitar isso e só ter contador (0).no começo?

Agradecemos antecipadamente.

Foi útil?

Solução

Inserir

:- abolish(counter/1).

no início do seu arquivo.Quando terminar o teste, remova-o.

Outras dicas

Se você usar esses fatos dinâmicos apenas para implementar contadores, deve pensar se esta é a melhor maneira de fazer isso.Usar assert/1 e retract/1 torna o código bastante lento.

Você pode tornar a variável do contador outro argumento de predicado que você passa adiante em seu código (você pode precisar distinguir entre entrada e saída, então tem dois argumentos extras), ou usar variáveis globais (que são recursos não lógicos,embora, o que às vezes é impossível).

Depende do sistema que você está usando.Em YAP, B, GNU, SICStus, o A diretiva :- dynamic(counter/1). tem esse efeito.Ou seja, apenas o fatos do arquivo estão presentes após o recarregamento.

No SWI, os predicados dinâmicos são mantidos conforme você descreve.Você precisa removê-los diretamente com retractall/1, que retém a informação de que o predicado é dinâmico.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top