From: <jom...@us...> - 2013-11-23 15:00:43
|
Revision: 1762 http://sourceforge.net/p/jason/svn/1762 Author: jomifred Date: 2013-11-23 15:00:39 +0000 (Sat, 23 Nov 2013) Log Message: ----------- cache isGround Modified Paths: -------------- trunk/src/jason/architecture/MindInspectorAgArch.java trunk/src/jason/asSemantics/TransitionSystem.java trunk/src/jason/asSyntax/ArithExpr.java trunk/src/jason/asSyntax/Structure.java trunk/src/jason/bb/DefaultBeliefBase.java trunk/src/test/TermTest.java Modified: trunk/src/jason/architecture/MindInspectorAgArch.java =================================================================== --- trunk/src/jason/architecture/MindInspectorAgArch.java 2013-11-23 14:28:34 UTC (rev 1761) +++ trunk/src/jason/architecture/MindInspectorAgArch.java 2013-11-23 15:00:39 UTC (rev 1762) @@ -22,7 +22,7 @@ package jason.architecture; -import jason.NoValueForVarException; +import jason.NoValueException; import jason.asSyntax.ASSyntax; import jason.asSyntax.NumberTerm; import jason.asSyntax.Structure; @@ -120,7 +120,7 @@ if (! hasMindInspectorByCycle) { try { updateInterval = (int)((NumberTerm)sConf.getTerm(0)).solve(); - } catch (NoValueForVarException e1) { + } catch (NoValueException e1) { e1.printStackTrace(); } new Thread("update agent mind inspector") { Modified: trunk/src/jason/asSemantics/TransitionSystem.java =================================================================== --- trunk/src/jason/asSemantics/TransitionSystem.java 2013-11-23 14:28:34 UTC (rev 1761) +++ trunk/src/jason/asSemantics/TransitionSystem.java 2013-11-23 15:00:39 UTC (rev 1762) @@ -24,7 +24,7 @@ package jason.asSemantics; import jason.JasonException; -import jason.NoValueForVarException; +import jason.NoValueException; import jason.RevisionFailedException; import jason.architecture.AgArch; import jason.asSyntax.ASSyntax; @@ -1216,7 +1216,7 @@ int deadline = 0; try { deadline = (int)((NumberTerm)hdl.getTerm(0)).solve(); - } catch (NoValueForVarException e1) { + } catch (NoValueException e1) { e1.printStackTrace(); } Modified: trunk/src/jason/asSyntax/ArithExpr.java =================================================================== --- trunk/src/jason/asSyntax/ArithExpr.java 2013-11-23 14:28:34 UTC (rev 1761) +++ trunk/src/jason/asSyntax/ArithExpr.java 2013-11-23 15:00:39 UTC (rev 1762) @@ -23,7 +23,7 @@ package jason.asSyntax; -import jason.NoValueForVarException; +import jason.NoValueException; import jason.asSemantics.Agent; import jason.asSemantics.Unifier; import jason.asSyntax.parser.as2j; @@ -180,7 +180,7 @@ value = new NumberTermImpl(op.eval(l, r)); } return value; - } catch (NoValueForVarException e) { + } catch (NoValueException e) { return clone(); } } Modified: trunk/src/jason/asSyntax/Structure.java =================================================================== --- trunk/src/jason/asSyntax/Structure.java 2013-11-23 14:28:34 UTC (rev 1761) +++ trunk/src/jason/asSyntax/Structure.java 2013-11-23 15:00:39 UTC (rev 1762) @@ -54,7 +54,9 @@ protected static final Term[] emptyTermArray = new Term[0]; // just to have a type for toArray in the getTermsArray method private List<Term> terms; - + protected Boolean isGround = true; + + public Structure(String functor) { //this.functor = (functor == null ? null : functor.intern()); // it does not improve performance in test i did! super(functor); @@ -66,7 +68,7 @@ final int tss = l.getArity(); terms = new ArrayList<Term>(tss); for (int i = 0; i < tss; i++) - terms.add(l.getTerm(i).clone()); + addTerm(l.getTerm(i).clone()); } // used by capply @@ -75,8 +77,7 @@ final int tss = l.getArity(); terms = new ArrayList<Term>(tss); for (int i = 0; i < tss; i++) - terms.add(l.getTerm(i).capply(u)); - resetHashCodeCache(); + addTerm(l.getTerm(i).capply(u)); } /** @@ -112,7 +113,7 @@ result = 7 * result + getTerm(i).hashCode(); return result; } - + public boolean equals(Object t) { if (t == null) return false; if (t == this) return true; @@ -212,6 +213,8 @@ public void addTerm(Term t) { if (t == null) return; terms.add(t); + if (!t.isGround()) + isGround = false; predicateIndicatorCache = null; resetHashCodeCache(); } @@ -221,23 +224,20 @@ terms.remove(index); predicateIndicatorCache = null; resetHashCodeCache(); + isGround = null; } @Override public Literal addTerms(Term ... ts ) { for (Term t: ts) - terms.add(t); - predicateIndicatorCache = null; - resetHashCodeCache(); + addTerm(t); return this; } @Override public Literal addTerms(List<Term> l) { for (Term t: l) - terms.add(t); - predicateIndicatorCache = null; - resetHashCodeCache(); + addTerm(t); return this; } @@ -246,6 +246,7 @@ terms = l; predicateIndicatorCache = null; resetHashCodeCache(); + isGround = null; return this; } @@ -253,6 +254,8 @@ public void setTerm(int i, Term t) { terms.set(i,t); resetHashCodeCache(); + if (isGround() && !t.isGround()) + isGround = false; } public Term getTerm(int i) { @@ -294,13 +297,17 @@ @Override public boolean isGround() { - final int size = getArity(); - for (int i=0; i<size; i++) { - if (!getTerm(i).isGround()) { - return false; + if (isGround == null) { + isGround = true; + final int size = getArity(); + for (int i=0; i<size; i++) { + if (!getTerm(i).isGround()) { + isGround = false; + break; + } } } - return true; + return isGround; } public boolean isUnary() { Modified: trunk/src/jason/bb/DefaultBeliefBase.java =================================================================== --- trunk/src/jason/bb/DefaultBeliefBase.java 2013-11-23 14:28:34 UTC (rev 1761) +++ trunk/src/jason/bb/DefaultBeliefBase.java 2013-11-23 15:00:39 UTC (rev 1762) @@ -144,7 +144,8 @@ entry = new BelEntry(); belsMap.put(l.getPredicateIndicator(), entry); } - entry.add(l.copy(), addInEnd); // we need to clone for the consequent event to not have a ref to this bel (which can change before the event being processed); see bug from Viviana Marcardi + l = l.copy(); // we need to clone l for the consequent event to not have a ref to this bel (which may change before the event is processed); see bug from Viviana Marcardi + entry.add(l, addInEnd); // add it in the percepts list if (l.hasAnnot(TPercept)) { @@ -162,7 +163,7 @@ if (l.hasSubsetAnnot(bl)) { // e.g. removing b[a] or b[a,d] from BB b[a,b,c] // second case fails if (l.hasAnnot(TPercept)) { - percepts.remove(bl); + boolean b = percepts.remove(bl); } boolean result = bl.delAnnots(l.getAnnots()); // note that l annots can be empty, in this case, nothing is deleted! return removeFromEntry(bl) || result; Modified: trunk/src/test/TermTest.java =================================================================== --- trunk/src/test/TermTest.java 2013-11-23 14:28:34 UTC (rev 1761) +++ trunk/src/test/TermTest.java 2013-11-23 15:00:39 UTC (rev 1762) @@ -79,7 +79,9 @@ // tests with variables t1.addTerm(new Structure("c")); + assertTrue(t3.isGround()); t3.addTerm(new VarTerm("X")); + assertFalse(t3.isGround()); assertFalse(t1.equals(t3)); Literal l3 = new LiteralImpl(true, new Pred("pos")); @@ -342,6 +344,7 @@ // p[a,b,c,d] = p[a,c|R] - ok and R=[b,d] Term t1 = parseTerm("p[c,a,b,d,c]"); Term t2 = parseTerm("p[c,a,c|R]"); + assertFalse(t2.isGround()); Unifier u = new Unifier(); assertTrue(u.unifies(t1, t2)); assertEquals("[b,d]",u.get("R").toString()); @@ -371,7 +374,9 @@ assertEquals("p[b,c,d,z]",t1.toString()); t1 = parseTerm("p[a,b,c,X]"); + assertFalse(t1.isGround()); t1 = t1.capply(u); + assertTrue(t1.isGround()); assertEquals("p[a,b,c,z]",t1.toString()); } @@ -696,6 +701,7 @@ public void testMakeVarAnnon2() { Literal l1 = Literal.parseLiteral("calc(AgY,QuadY2,QuadY2)"); + assertFalse(l1.isGround()); Literal l2 = Literal.parseLiteral("calc(32,33,V)"); Unifier u = new Unifier(); assertTrue(u.unifies(l1, l2)); @@ -715,8 +721,8 @@ l2 = (Literal)l2.capply(u); assertEquals("calc(32,33,33)", l2.toString()); l1 = (Literal)l1.capply(u); + assertTrue(l1.isGround()); assertEquals("calc(32,33,33)", l1.toString()); - } public void testMakeVarAnnon3() { @@ -728,7 +734,9 @@ assertEquals("vl("+l1.getTerm(1)+")",l1.getAnnots("vl").get(0).toString()); l1 = Literal.parseLiteral("calc(a)[a,b|T]"); + assertFalse(l1.isGround()); l1.makeVarsAnnon(); + assertFalse(l1.isGround()); assertTrue(l1.toString().contains("_")); assertFalse("calc(a)[a,b|T]".equals(l1.toString())); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |