Subject: Re: [Fwd: abolish/1 in 3.3.0]

From: "Richard A. O'Keefe" <[email-masked]>
Date: Fri, 21 Jan 2000 13:26:53 +1300 (NZDT)

> The abolish/1 predicate is meant to retract dynamic predicates.
	
	Not in Quintus Prolog it wasn't!
	
A little bit of history here:
abolish/1 was added to DEC-10 Prolog precisely in order to delete
**compiled** predicates.
In DEC-10 Prolog, there was no :-dynamic declaration, so if you
wanted to delete an interpreted (in effect, a dynamic) predicate
all you had to do was

    delete(Name, Arity) :-
        functor(Head, Name, Arity),
        clause(Head, _, Ref),
        erase(Ref),
        fail ; true.

and no new primitive was needed.  A new primitive *was* needed for
deleting compiled code, and abolish/1 was the one.

I got sick to my stomach reading ISO Prolog drafts; it was clear
that very few of the perpetrators had a practical clue.  To have
restricted abolish/1 to the direct opposite of its original purpose
is entirely in keeping with their "let's re-invent the wheel, and
this time make it pentagonal" approach.