# Retractall vs. abolish

**URL:** <https://swi-prolog.discourse.group/t/retractall-vs-abolish/4820>\
**Category:** Nice to know\
**Created:** [December 29, 2021, 5:45am UTC](https://swi-prolog.discourse.group/t/retractall-vs-abolish/4820 "2021-12-29T05:45:17Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![grossdan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/grossdan/32/23_2.png) [@grossdan](https://swi-prolog.discourse.group/u/grossdan)\
**Post date:** [December 29, 2021, 5:45am UTC](https://swi-prolog.discourse.group/t/retractall-vs-abolish/4820/1 "2021-12-29T05:45:18Z")

</div>

Hello,

Just noticed a key difference between retractall and abolish.

Abolish not only removes dynamic predicates but also “forgets” the dynamic/1 declaration.

Interestingly, since swi-prolog doesn’t cause an error when asserting a dynamic predicate without a prior dynamic/1 declaration, everything looks good – but, if one tries to call a dynamic predicate before a first is asserted, then this fails (miserably).

The remedy is to pair an abolish with a dynamic call.

However, retractall/1 does not “forget” the prior dynamic declaration and everything is fine …

Dan
