В чем разница между abolish/1 и retractall/1?

прочитав руководство, я не могу найти разницу между ними.

в инструкции написано:

рекомендуется использовать retractall / 1 для стирания всех предложений динамического предиката.

поэтому я решил использовать retractall/1 в моей программе; однако, мне интересно, в чем разница.

3 ответов


на retractall/1 стандартный встроенный предикат можно использовать для удаления всех предложений динамического предиката, но предикат все равно будет известен среде выполнения. The retractall/1, то вызов просто не получается. Но если вы отмените динамический предикат, вызов его после приведет к ошибка существования предикатов.


по аналогии с SQL:

retractall(table_name(_,_,_)) может быть delete from table_name, а abolish(table_name/3) будет играть как drop table_name


прежде чем я прочитаю ваш вопрос и @ Paulomoura's fine answer, Я тоже не знал ответа.

с этим ответом я не хочу копировать ответ Пауло. Вместо этого я предлагаю вам рассмотреть возможность чтения / поиска альтернативных источников, связанных с прологом:

обратите внимание, что выше может или не может прямо подходят система Prolog, которую вы используете.

тем не менее, наличие нескольких источников-это хорошо: это может помешать вам получить застрял!