В чем разница между 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, Я тоже не знал ответа.
с этим ответом я не хочу копировать ответ Пауло. Вместо этого я предлагаю вам рассмотреть возможность чтения / поиска альтернативных источников, связанных с прологом:
директивы ISO, конструкции управления и builtins -iso-prolog на SO
4.12.5 удаление положений из База данных -sicstus-prolog руководство
8.7 управление динамическим предложением -gnu-prolog руководство
Глава 9 динамические предложения и глобальные переменные -bprolog руководство
6.14 утверждение, втягивание и другая база данных Модификации -xsb по руководство
обратите внимание, что выше может или не может прямо подходят система Prolog, которую вы используете.
тем не менее, наличие нескольких источников-это хорошо: это может помешать вам получить застрял!