Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Posting-Version: version B 2.10.1 6/24/83; site isucs1.UUCP
Path: utzoo!watmath!clyde!burl!ulysses!mhuxj!houxm!ihnp4!stolaf!umn-cs!isucs1!notes
From: notes@isucs1.UUCP
Newsgroups: net.lang.prolog
Subject: Prolog-86 bug.
Message-ID: <217@isucs1.UUCP>
Date: Sat, 8-Dec-84 02:01:56 EST
Article-I.D.: isucs1.217
Posted: Sat Dec  8 02:01:56 1984
Date-Received: Mon, 10-Dec-84 03:17:25 EST
Sender: notes@isucs1.UUCP
Organization: Iowa State University
Lines: 32
Nf-ID: #N:isucs1:22300001:000:1197
Nf-From: isucs1!scheer    Dec  7 01:50:00 1984


   While working on a recent research project in Prolog-86 the following
bug was discovered:

      After a RETRACT statement has been executed, any ASSERTs 
   (or ASSERTZs, etc) that are encountered are ignored.  If you use
   the trace facility, it will look like the ASSERT worked, but upon 
   examination of the database, you will note that the ASSERT in fact 
   did not work.

   This is a pretty major bug.  Since there are different companies offering
Prolog-86, I don't know if all versions of Prolog-86 are corrupted.

   The following predicate could be used to determine if your version is
operating correctly:

      a :- assertz(tic) ,
           assertz(tac) ,
           retract(tac) ,
           assertz(toe).

   The database should contain 'tic' and 'toe'.  If only 'tic' is present,
then you have a corrupted version.

   If anybody has come across any other Prolog-86 bugs, or knows if this
particular bug has been corrected in newer versions, I would appreciate
hearing from you.

                                           -- Jon Scheer
                                           USENET: isucs1!scheer
                                           CSNET:  scheer@iowa-state