[armedbear-devel] "Inconsistent precedence graph" when calling print-object on java instance

Alessio Stalla alessiostalla at gmail.com
Sun May 9 14:58:40 UTC 2010


On Sun, May 9, 2010 at 7:05 AM, Alan Ruttenberg
<alanruttenberg at gmail.com> wrote:
> Didn't seem to do it:
>
> (ensure-java-class (find-java-class
> "uk.ac.manchester.cs.owl.owlapi.OWLClassImpl"))
>
> Fails - trackback below.

Duh, right. The remove-duplicates was a silly mistake, it's completely
non influential. The problem here is that Java inheritance of
interfaces is order-independent, while CLOS honors a class precedence
order. It's thus possible to have Java interfaces that create
precedence graphs which cannot be ordered by CLOS standard rules, as
you have found out, specifically:

OWLObject extends Comparable, but
OWLPredicate extends Comparable, OWLObject

in CLOS, that would be like:

(defclass comp () ())
(defclass owlo (comp) ())
(defclass owlp (comp owlo) ())

So, I patched it again to completely skip the default
compute-class-precedence-list method and directly sort the list of
superclasses (as returned by mop::compute-superclasses*). I tested it
with your OWL example and it works.

Thanks for reporting!

Alessio




More information about the armedbear-devel mailing list