- From: Jos De_Roo <jos.deroo.jd@belgium.agfa.com>
- Date: Fri, 24 May 2002 12:36:38 +0200
- To: "timbl" <timbl@w3.org>
- Cc: connolly@w3.org, jjc@hpl.hp.com, www-archive@w3.org
- Message-ID: <OF3C34E72C.323C8C04-ONC1256BC3.003767D2@agfa.be>
[sorry to come in here, but I couldn't resist] > The basic idea is that you compare (for ordering) two anonymous nodes as > a function > of the properties they have, which often ends up being very recursive, > and in screw cases, being circular. You can, afetr all, have a graph > which is syymetric in the two arbitrary names _:a and _:b. that's exactly what we do while mathing bnodes with some (Java) code [1] which should be refactored /// final boolean unify(Euler t, Euler r, stack s) { if (t == null) return false; if (ref != null && object == null) return ref.unify(t, r, s); if (t.ref != null && t.object == null) return unify(t.ref, r, s); if (bound && t.bound) { if (varid != -1) { Euler el = new Euler(); Euler ev = t.deref(); el.verb = ev.verb; el.cverb = ev.cverb; el.varid = ev.varid; el.bound = ev.bound; if (!deref().unify(el, r, s)) return false; } if (subject == null && t.subject == null && object != null && t.object != null) { Euler el = this; Euler elt = t; if (s == null) { // no stack while (el != null && elt != null) { el = el.near; elt = elt.near; } if (el != null || elt != null) return false; el = this; elt = t; } while (elt != null) { el = this; while (el != null) { if (bound && t.bound && (elt.verb == null || el.verb != null && el.deref().verb == elt.deref().verb)) { if (el.object != null && !el.object.unify(elt.object, r, s)) { if (r.uniq.get(el.deref().verb) != null) return false; } else break; } el = el.near; } if (el == null) return false; elt = elt.near; } } else { if (varid == -1 && verb != null && t.verb != null && deref().verb ! = t.deref().verb) return false; if (subject != null && !subject.unify(t.subject, r, s)) return false; if (object != null && !object.unify(t.object, r, s)) return false; } return true; } if (bound) return t.unify(this, r, s); if (s != null) { if (subject != null && !subject.unify(t.subject, r, s)) return false; if (object != null && !object.unify(t.object, r, s)) return false; deref().ref = t; bound = true; s.push(this, 0); } return true; } /// and such a bnode funtional term is an Euler object with subject == null and object != null tied together with near links and indeed the matching (unification) is very recursive (actually 9 times unify within unify I just see) -- Jos De Roo [1](See attached file: Euler.java)(See attached file: Parser.java)
Attachments
- application/octet-stream attachment: Euler.java
- application/octet-stream attachment: Parser.java
Received on Friday, 24 May 2002 06:46:40 UTC