From ok@hermes.otago.ac.nz  Fri Jan 21 01:27:01 2000
Received: from hermes.otago.ac.nz (hermes.otago.ac.nz [139.80.32.49])
	by swi.psy.uva.nl (8.9.3/8.9.3) with ESMTP id BAA25915
	for <prolog@swi.psy.uva.nl>; Fri, 21 Jan 2000 01:27:00 +0100 (MET)
Received: (from ok@localhost)
	by hermes.otago.ac.nz (8.9.3/8.9.3) id NAA16019;
	Fri, 21 Jan 2000 13:26:53 +1300 (NZDT)
Date: Fri, 21 Jan 2000 13:26:53 +1300 (NZDT)
From: "Richard A. O'Keefe" <ok@hermes.otago.ac.nz>
Message-Id: <200001210026.NAA16019@hermes.otago.ac.nz>
To: p.singleton@keele.ac.uk, prolog@swi.psy.uva.nl
Subject: Re: [Fwd: abolish/1 in 3.3.0]

	> 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.

