/****************************************************************
Copyright (C) The University of Melbourne 1993
All Rights Reserved

Permission to use, copy, modify, and distribute this software and
its documentation for any purpose and without fee is hereby
granted, provided that the above copyright notice appear in all
copies and that both that the copyright notice and this
permission notice and warranty disclaimer appear in supporting
documentation, and that the name of The University of Melbourne 
or any of its entities not be used in advertising or publicity
pertaining to distribution of the software without specific,
written prior permission.

THE UNIVERSITY OF MELBOURNE DISCLAIMS ALL WARRANTIES WITH REGARD
TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL THE UNIVERSITY
OF MELBOURNE OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
THIS SOFTWARE.

AUTHORS : Jason Lee (jasonl@cs.mu.oz.au)
	  Andrew Davison (ad@cs.mu.oz.au)
****************************************************************/

/* Just a small list of important (maybe not) changes from
	the original bebop paper, and a reason for the conflicts
*/

The conflicts are because of the possibly empty when declaration with NU-prolog
code. That is for example :

	?- hello(X) when ground(X).
	hello(X) :- .......

	goodbye(X, Y) :- ....

The hello predicate has a when declaration and so is ok, but the goodbye
predicate doesn't have a when declartion so either it can shifted (default)
and be part of the hello predicate in the sense that yacc thinks the when
declartion applies to both. Or an empty when declartion can be interpreted and
thus goodbye correctly has no when declaration. Yacc does the wrong thing by
default and shifts, but it really doesn't matter in the end. OK so why have
an empty when clause in yacc, because the first predicate in the NU-Prolog
section may not have one, when declaration !!!! Ahhhh.

List of minor changes from original paper :

1. Also added in : guard , that is the guard is the same as in Parlog

2. Also if you use $any you can refer to the item via "Any" variable which
will contain the item, this is available but not really useful or documented.

3. Multiply becomes uses lists, [V, J, K] becomes [g, (1 + 2 + 3), l]
instead of V, J, K becomes g, 1 + 2 + 3, l

4. (Just a point) Pnp discards code such as below
	
	?- lazyDet augment(i, i, o).
	augment(Name, Atts, Defaults, NewAtts).
	% augment attributes with missing defaults

the use of "-w" is therefore encouraged.
No way around it.

5. Undocumented features for debugging are available.(see file bebop.c)
