|
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.
|