From: <jom...@us...> - 2008-09-16 10:43:31
|
Revision: 1373 http://jason.svn.sourceforge.net/jason/?rev=1373&view=rev Author: jomifred Date: 2008-09-16 17:43:27 +0000 (Tue, 16 Sep 2008) Log Message: ----------- add getLogger in Environmnet Modified Paths: -------------- trunk/src/jason/asSyntax/ListTermImpl.java trunk/src/jason/environment/Environment.java trunk/src/jason/stdlib/substring.java trunk/src/test/StdLibTest.java Modified: trunk/src/jason/asSyntax/ListTermImpl.java =================================================================== --- trunk/src/jason/asSyntax/ListTermImpl.java 2008-09-14 14:54:57 UTC (rev 1372) +++ trunk/src/jason/asSyntax/ListTermImpl.java 2008-09-16 17:43:27 UTC (rev 1373) @@ -339,7 +339,7 @@ ListTerm result = new ListTermImpl(); ListTerm tail = result; for (Term t: set) - tail = tail.append((Term)t.clone()); + tail = tail.append(t.clone()); return result; } @@ -524,7 +524,7 @@ public Term next() { last = pos; pos++; - return get(last); + return get(last); // TODO: get complexity is O(n)! and sort uses this iterator.... it will be nice to have a get implementation with constant time. } public int nextIndex() { return pos+1; Modified: trunk/src/jason/environment/Environment.java =================================================================== --- trunk/src/jason/environment/Environment.java 2008-09-14 14:54:57 UTC (rev 1372) +++ trunk/src/jason/environment/Environment.java 2008-09-16 17:43:27 UTC (rev 1373) @@ -118,6 +118,9 @@ return environmentInfraTier; } + public Logger getLoger() { + return logger; + } public void informAgsEnvironmentChanged(Collection<String> agents) { if (environmentInfraTier != null) { @@ -310,7 +313,7 @@ public void run() { try { boolean success = executeAction(agName, action); - environmentInfraTier.actionExecuted(agName, action, success, infraData); + environmentInfraTier.actionExecuted(agName, action, success, infraData); // send the result of the execution to the agent } catch (Exception ie) { if (!(ie instanceof InterruptedException)) { logger.log(Level.WARNING, "act error!",ie); Modified: trunk/src/jason/stdlib/substring.java =================================================================== --- trunk/src/jason/stdlib/substring.java 2008-09-14 14:54:57 UTC (rev 1372) +++ trunk/src/jason/stdlib/substring.java 2008-09-16 17:43:27 UTC (rev 1373) @@ -52,7 +52,7 @@ return singleton; } - @Override public int getMinArgs() { return 3; } + @Override public int getMinArgs() { return 2; } @Override public int getMaxArgs() { return 3; } @Override Modified: trunk/src/test/StdLibTest.java =================================================================== --- trunk/src/test/StdLibTest.java 2008-09-14 14:54:57 UTC (rev 1372) +++ trunk/src/test/StdLibTest.java 2008-09-16 17:43:27 UTC (rev 1373) @@ -215,10 +215,6 @@ } - public static void main(String[] a) { - new StdLibTest().testSubString(); - } - public void testConcat() { ListTerm l1 = ListTermImpl.parseList("[a,b,c]"); ListTerm l2 = ListTermImpl.parseList("[d,e,f]"); @@ -248,7 +244,7 @@ } @SuppressWarnings("unchecked") - public void testSubString() { + public void testSubString() throws Exception { StringTerm s1 = new StringTermImpl("a"); StringTerm s2 = new StringTermImpl("bbacca"); @@ -258,22 +254,19 @@ VarTerm X = new VarTerm("X"); Unifier u = new Unifier(); - try { - assertTrue((Boolean)new jason.stdlib.substring().execute(null, u, new Term[] { s1, s2 })); - Iterator<Unifier> i = (Iterator)new jason.stdlib.substring().execute(null, u, new Term[] { s1, s2 , X}); - assertEquals(i.next().get("X").toString(), "2"); - assertEquals(i.next().get("X").toString(), "5"); - assertFalse(i.hasNext()); - assertTrue((Boolean)new jason.stdlib.substring().execute(null, u, new Term[] { t1, t2})); - i = (Iterator)new jason.stdlib.substring().execute(null, new Unifier(), new Term[] { t1, t2, X}); - assertTrue(i.hasNext()); - assertEquals(i.next().get("X").toString(), "9"); - assertFalse(i.hasNext()); + assertTrue((Boolean)new jason.stdlib.substring().execute(null, u, new Term[] { s1, s2 })); + Iterator<Unifier> i = (Iterator)new jason.stdlib.substring().execute(null, u, new Term[] { s1, s2 , X}); + assertEquals(i.next().get("X").toString(), "2"); + assertEquals(i.next().get("X").toString(), "5"); + assertFalse(i.hasNext()); - } catch (Exception e) { - e.printStackTrace(); - } + assertTrue((Boolean)new jason.stdlib.substring().execute(null, u, new Term[] { t1, t2})); + i = (Iterator)new jason.stdlib.substring().execute(null, new Unifier(), new Term[] { t1, t2, X}); + assertTrue(i.hasNext()); + assertEquals(i.next().get("X").toString(), "9"); + assertFalse(i.hasNext()); + } public void testDropGoal1() throws ParseException { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jom...@us...> - 2008-09-27 15:39:24
|
Revision: 1382 http://jason.svn.sourceforge.net/jason/?rev=1382&view=rev Author: jomifred Date: 2008-09-27 15:39:20 +0000 (Sat, 27 Sep 2008) Log Message: ----------- optimise Unifier for the new hierarchy of classes Modified Paths: -------------- trunk/src/jason/asSemantics/Unifier.java trunk/src/jason/asSyntax/ArithFunctionTerm.java trunk/src/jason/asSyntax/LogExpr.java trunk/src/jason/asSyntax/PlanBodyImpl.java trunk/src/jason/asSyntax/Structure.java trunk/src/test/TermTest.java Modified: trunk/src/jason/asSemantics/Unifier.java =================================================================== --- trunk/src/jason/asSemantics/Unifier.java 2008-09-27 13:56:22 UTC (rev 1381) +++ trunk/src/jason/asSemantics/Unifier.java 2008-09-27 15:39:20 UTC (rev 1382) @@ -23,10 +23,8 @@ package jason.asSemantics; -import jason.asSyntax.Atom; import jason.asSyntax.Literal; import jason.asSyntax.Pred; -import jason.asSyntax.Structure; import jason.asSyntax.Term; import jason.asSyntax.Trigger; import jason.asSyntax.VarTerm; @@ -215,50 +213,27 @@ // both terms are not vars - // if the first is an Atom and the second pred, they must have the same functor - // and no terms in the pred - if (t1g.isAtom() && t2g.isPred()) { - Atom t1a = (Atom)t1g; - Pred t2p = (Pred)t2g; - return t2p.getArity() == 0 && t1a.getFunctor().equals(t2p.getFunctor()); - } - - // if any of the terms is not a structure (is a number or a + // if any of the terms is not a literal (is a number or a // string), they must be equal - if (!t1g.isStructure() || !t2g.isStructure()) + if (!t1g.isLiteral() || !t2g.isLiteral()) return t1g.equals(t2g); - // both terms are structures + // both terms are literal - Structure t1s = (Structure)t1g; - Structure t2s = (Structure)t2g; + Literal t1s = (Literal)t1g; + Literal t2s = (Literal)t2g; // different arities final int ts = t1s.getArity(); if (ts != t2s.getArity()) return false; - final boolean t1islit = t1g.isLiteral(); - final boolean t2islit = t2g.isLiteral(); - final boolean t1isneg = t1islit && ((Literal)t1g).negated(); - final boolean t2isneg = t2islit && ((Literal)t2g).negated(); - // if both are literal, they must have the same negated - if (t1islit && t2islit && t1isneg != t2isneg) + if (t1s.negated() != t2s.negated()) return false; - // if one term is literal and the other not, the literal should not be negated - if (t1islit && !t2islit && t1isneg) - return false; - if (t2islit && !t1islit && t2isneg) - return false; - - // if the first term is a predicate and the second not, the first should not have annots - if (t1g.isPred() && !t2g.isPred() && ((Pred)t1g).hasAnnot()) - return false; - // different functor - if (!t1s.getFunctor().equals(t2s.getFunctor())) // t1a.getFunctor() != null && + if (!t1s.getFunctor().equals(t2s.getFunctor())) return false; // unify inner terms @@ -267,10 +242,9 @@ if (!unifiesNoUndo(t1s.getTerm(i), t2s.getTerm(i))) return false; - // if both are predicates, the first's annots must be subset of the second's annots - if (t1g.isPred() && t2g.isPred()) - if ( ! ((Pred)t1g).hasSubsetAnnot((Pred)t2g, this)) - return false; + // the first's annots must be subset of the second's annots + if ( ! t1s.hasSubsetAnnot(t2s, this)) + return false; return true; } Modified: trunk/src/jason/asSyntax/ArithFunctionTerm.java =================================================================== --- trunk/src/jason/asSyntax/ArithFunctionTerm.java 2008-09-27 13:56:22 UTC (rev 1381) +++ trunk/src/jason/asSyntax/ArithFunctionTerm.java 2008-09-27 15:39:20 UTC (rev 1382) @@ -14,6 +14,8 @@ * Represents an arithmetic function, like math.max(arg1,arg2) -- a functor (math.max) and two arguments. * A Structure is thus used to store the data. * + * @composed - "arguments (from Structure.terms)" 0..* Term + * * @author Jomi * */ Modified: trunk/src/jason/asSyntax/LogExpr.java =================================================================== --- trunk/src/jason/asSyntax/LogExpr.java 2008-09-27 13:56:22 UTC (rev 1381) +++ trunk/src/jason/asSyntax/LogExpr.java 2008-09-27 15:39:20 UTC (rev 1382) @@ -44,10 +44,6 @@ @navassoc - op - LogicalOp - //@view - //@match class jason.asSyntax.Term - //@opt !hide - */ public class LogExpr extends BinaryStructure implements LogicalFormula { Modified: trunk/src/jason/asSyntax/PlanBodyImpl.java =================================================================== --- trunk/src/jason/asSyntax/PlanBodyImpl.java 2008-09-27 13:56:22 UTC (rev 1381) +++ trunk/src/jason/asSyntax/PlanBodyImpl.java 2008-09-27 15:39:20 UTC (rev 1382) @@ -15,7 +15,7 @@ * * * @navassoc - next - PlanBody - * @navassoc - type - BodyType + * @navassoc - type - PlanBody.BodyType * * @author Jomi */ Modified: trunk/src/jason/asSyntax/Structure.java =================================================================== --- trunk/src/jason/asSyntax/Structure.java 2008-09-27 13:56:22 UTC (rev 1381) +++ trunk/src/jason/asSyntax/Structure.java 2008-09-27 15:39:20 UTC (rev 1382) @@ -44,7 +44,7 @@ * e.g.: val(10,x(3)). * <i>n</i> can be 0, so this class also represents atoms. * - * @composed - - 0..* Term + * @composed - terms 0..* Term * */ public class Structure extends Atom { Modified: trunk/src/test/TermTest.java =================================================================== --- trunk/src/test/TermTest.java 2008-09-27 13:56:22 UTC (rev 1381) +++ trunk/src/test/TermTest.java 2008-09-27 15:39:20 UTC (rev 1382) @@ -335,7 +335,7 @@ assertTrue(u.unifies(t1, t3)); assertEquals(u.get("H").toString(),"a"); assertEquals(u.get("R").toString(),"[b,c,d]"); - } + } public void testApplyAnnots() { Term t1 = DefaultTerm.parse("p[a,X,c,d]"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jom...@us...> - 2009-01-06 14:19:26
|
Revision: 1426 http://jason.svn.sourceforge.net/jason/?rev=1426&view=rev Author: jomifred Date: 2009-01-06 14:19:25 +0000 (Tue, 06 Jan 2009) Log Message: ----------- fix bug in Number.compareTo Modified Paths: -------------- trunk/src/jason/asSyntax/ListTermImpl.java trunk/src/jason/asSyntax/NumberTermImpl.java trunk/src/test/TermTest.java Modified: trunk/src/jason/asSyntax/ListTermImpl.java =================================================================== --- trunk/src/jason/asSyntax/ListTermImpl.java 2008-12-26 19:59:05 UTC (rev 1425) +++ trunk/src/jason/asSyntax/ListTermImpl.java 2009-01-06 14:19:25 UTC (rev 1426) @@ -344,7 +344,6 @@ for (Term t: set) tail = tail.append(t.clone()); return result; - } /** returns an iterator where each element is a ListTerm */ @@ -508,6 +507,11 @@ public ListIterator<Term> listIterator() { return listIterator(0); } + + // TODO: do not base this implementation on get (that is O(n)) + // conversely, implement all other methods of List based on this iterator + // (see AbstractSequentialList) + // merge code of ListTermIterator here and use always the same iterator public ListIterator<Term> listIterator(final int startIndex) { final ListTermImpl list = this; return new ListIterator<Term>() { @@ -527,7 +531,7 @@ public Term next() { last = pos; pos++; - return get(last); // TODO: get complexity is O(n)! and sort uses this iterator.... it will be nice to have a get implementation with constant time. + return get(last); } public int nextIndex() { return pos+1; Modified: trunk/src/jason/asSyntax/NumberTermImpl.java =================================================================== --- trunk/src/jason/asSyntax/NumberTermImpl.java 2008-12-26 19:59:05 UTC (rev 1425) +++ trunk/src/jason/asSyntax/NumberTermImpl.java 2009-01-06 14:19:25 UTC (rev 1426) @@ -99,6 +99,7 @@ NumberTerm st = (NumberTerm)o; if (solve() > st.solve()) return 1; if (solve() < st.solve()) return -1; + return 0; } if (o instanceof Atom) return -1; Modified: trunk/src/test/TermTest.java =================================================================== --- trunk/src/test/TermTest.java 2008-12-26 19:59:05 UTC (rev 1425) +++ trunk/src/test/TermTest.java 2009-01-06 14:19:25 UTC (rev 1426) @@ -532,6 +532,16 @@ l = ListTermImpl.parseList("[b,[1,1,1],c,10,g,casa,f(10),5,[3,10],f(4),[3,4]]"); Collections.sort(l); assertEquals("[5,10,b,c,casa,f(4),f(10),g,[3,4],[3,10],[1,1,1]]",l.toString()); + + Term t1 = ASSyntax.createNumber(10); + Term t2 = ASSyntax.createNumber(10); + assertEquals(0, t1.compareTo(t2)); + Term v1 = new VarTerm("X1"); + Unifier u = new Unifier(); + u.unifies(v1, t1); + v1.apply(u); + assertEquals(0, v1.compareTo(t2)); + assertEquals(0, t2.compareTo(v1)); } public void testUnify4() throws ParseException { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jom...@us...> - 2009-02-08 17:58:07
|
Revision: 1431 http://jason.svn.sourceforge.net/jason/?rev=1431&view=rev Author: jomifred Date: 2009-02-08 17:58:02 +0000 (Sun, 08 Feb 2009) Log Message: ----------- fix a bug in Arithmetic expressions Modified Paths: -------------- trunk/src/jason/asSyntax/ArithFunctionTerm.java trunk/src/test/ExprTermTest.java Modified: trunk/src/jason/asSyntax/ArithFunctionTerm.java =================================================================== --- trunk/src/jason/asSyntax/ArithFunctionTerm.java 2009-01-23 07:41:05 UTC (rev 1430) +++ trunk/src/jason/asSyntax/ArithFunctionTerm.java 2009-02-08 17:58:02 UTC (rev 1431) @@ -67,6 +67,12 @@ } @Override + public boolean isLiteral() { + return false; + } + + + @Override public boolean isArithExpr() { return !isEvaluated(); } Modified: trunk/src/test/ExprTermTest.java =================================================================== --- trunk/src/test/ExprTermTest.java 2009-01-23 07:41:05 UTC (rev 1430) +++ trunk/src/test/ExprTermTest.java 2009-02-08 17:58:02 UTC (rev 1431) @@ -5,6 +5,7 @@ import jason.asSemantics.Agent; import jason.asSemantics.TransitionSystem; import jason.asSemantics.Unifier; +import jason.asSyntax.ASSyntax; import jason.asSyntax.ArithExpr; import jason.asSyntax.ArithFunctionTerm; import jason.asSyntax.ListTerm; @@ -13,7 +14,9 @@ import jason.asSyntax.NumberTerm; import jason.asSyntax.NumberTermImpl; import jason.asSyntax.RelExpr; +import jason.asSyntax.Term; import jason.asSyntax.VarTerm; +import jason.asSyntax.parser.ParseException; import jason.infra.centralised.CentralisedAgArch; import java.util.Collections; @@ -64,7 +67,7 @@ assertEquals(new NumberTermImpl(2.5).hashCode(), nb.hashCode()); } - public void testUnify() { + public void testUnify1() { Literal t1 = (Literal) Literal.parseLiteral("p(X*2)").clone(); Literal t2 = Literal.parseLiteral("p(Y)"); Unifier u = new Unifier(); @@ -82,6 +85,23 @@ assertEquals(t2.toString(), "p(10)"); } + public void testUnify2() throws ParseException { + Unifier u = new Unifier(); + u.unifies(new VarTerm("X"), new NumberTermImpl(3)); + Term e1 = ASSyntax.parseTerm("X-1"); + e1.apply(u); + assertTrue(u.unifies(new NumberTermImpl(2), e1)); + assertTrue(u.unifies(e1, new NumberTermImpl(2))); + assertTrue(u.unifies(new NumberTermImpl(2), e1.clone())); + + u.unifies(new VarTerm("Y"), new NumberTermImpl(1)); + Term e2 = ASSyntax.parseTerm("Y+1"); + e2.apply(u); + assertFalse(e1.isLiteral()); + assertFalse(e2.isLiteral()); + assertTrue(u.unifies(e2, e1)); + } + public void testAddAddAdd() { Literal t1 = Literal.parseLiteral("p(X+1)"); Unifier u = new Unifier(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jom...@us...> - 2009-02-14 18:08:52
|
Revision: 1444 http://jason.svn.sourceforge.net/jason/?rev=1444&view=rev Author: jomifred Date: 2009-02-14 18:08:49 +0000 (Sat, 14 Feb 2009) Log Message: ----------- fix bug of var unified with atom an then add in BB, as in X = p; +X; Modified Paths: -------------- trunk/src/jason/asSemantics/TransitionSystem.java trunk/src/jason/asSyntax/VarTerm.java trunk/src/templates/ia trunk/src/test/VarTermTest.java Modified: trunk/src/jason/asSemantics/TransitionSystem.java =================================================================== --- trunk/src/jason/asSemantics/TransitionSystem.java 2009-02-13 18:17:30 UTC (rev 1443) +++ trunk/src/jason/asSemantics/TransitionSystem.java 2009-02-14 18:08:49 UTC (rev 1444) @@ -23,6 +23,7 @@ package jason.asSemantics; +import jade.domain.introspection.GetValue; import jason.JasonException; import jason.RevisionFailedException; import jason.architecture.AgArch; @@ -41,6 +42,7 @@ import jason.asSyntax.Structure; import jason.asSyntax.Term; import jason.asSyntax.Trigger; +import jason.asSyntax.VarTerm; import jason.asSyntax.Trigger.TEOperator; import jason.asSyntax.Trigger.TEType; import jason.asSyntax.parser.ParseException; @@ -543,10 +545,7 @@ case delAddBel: // -+a(1,X) ===> remove a(_,_), add a(1,X) // change all vars to anon vars to remove it - if (!body.hasSource()) { - // do not add source(self) in case the programmer set a source - body.addAnnot(BeliefBase.TSelf); - } + body = addSelfSource(body); Literal bc = (Literal)body.clone(); bc.makeTermsAnnon(); // to delete, create events as external to avoid that @@ -567,11 +566,7 @@ // Rule AddBel case addBel: - if (!body.hasSource()) { - // do not add source(self) in case the - // programmer set the source - body.addAnnot(BeliefBase.TSelf); - } + body = addSelfSource(body); // calculate focus Intention newfocus = Intention.EmptyInt; @@ -599,10 +594,7 @@ break; case delBel: - if (!body.hasSource()) { - // do not add source(self) in case the programmer set a source - body.addAnnot(BeliefBase.TSelf); - } + body = addSelfSource(body); newfocus = Intention.EmptyInt; if (setts.sameFocus()) @@ -626,6 +618,22 @@ break; } } + + // add the self source in the body in case no other source was given + private Literal addSelfSource(Literal body) { + // manage the case of var unified with atom + if (body instanceof VarTerm) { + Term v = ((VarTerm)body).getValue(); + if (v != null && v instanceof Atom) + body = new LiteralImpl((Atom)v); + } + if (!body.hasSource()) { + // do not add source(self) in case the + // programmer set the source + body.addAnnot(BeliefBase.TSelf); + } + return body; + } public void applyClrInt(Intention i) throws JasonException { while (true) { // quit the method by return Modified: trunk/src/jason/asSyntax/VarTerm.java =================================================================== --- trunk/src/jason/asSyntax/VarTerm.java 2009-02-13 18:17:30 UTC (rev 1443) +++ trunk/src/jason/asSyntax/VarTerm.java 2009-02-14 18:08:49 UTC (rev 1444) @@ -422,42 +422,50 @@ @Override public void setAnnots(ListTerm l) { - if (value != null && value.isPred()) - ((Pred) value).setAnnots(l); + if (value != null) + if (getValue().isPred()) + ((Pred) value).setAnnots(l); + else + logger.log(Level.WARNING, "The setAnnots '"+l+"' in "+this+" was lost, since this var value is not a Pred. The value's class is "+getValue().getClass().getName(), new Exception()); else super.setAnnots(l); } - /* @Override - public void addAnnot(int index, Term t) { - if (value != null && getValue().isPred()) - ((Pred) getValue()).addAnnot(index, t); - else - super.addAnnot(index, t); - } - */ - - @Override public boolean importAnnots(Literal p) { - if (value != null && getValue().isPred()) - return ((Pred) getValue()).importAnnots(p); + if (value != null) + if (getValue().isPred()) { + return ((Pred) getValue()).importAnnots(p); + } else { + logger.log(Level.WARNING, "The importAnnots '"+p+"' in "+this+" was lost, since this var value is not a Pred. The value's class is "+getValue().getClass().getName(), new Exception()); + return false; + } else return super.importAnnots(p); } @Override public boolean addAnnot(Term t) { - if (value != null && getValue().isPred()) - return ((Pred) getValue()).addAnnot(t); + if (value != null) + if (getValue().isPred()) { + return ((Pred) getValue()).addAnnot(t); + } else { + logger.log(Level.WARNING, "The add of annotation '"+t+"' in "+this+" was lost, since this var value is not a Pred. The value's class is "+getValue().getClass().getName(), new Exception()); + return false; + } else return super.addAnnot(t); } @Override public Literal addAnnots(List<Term> l) { - if (value != null && getValue().isPred()) - return ((Pred) getValue()).addAnnots(l); + if (value != null) + if (getValue().isPred()) { + return ((Pred) getValue()).addAnnots(l); + } else { + logger.log(Level.WARNING, "The addAnnots '"+l+"' in "+this+" was lost, since this var value is not a Pred. The value's class is "+getValue().getClass().getName(), new Exception()); + return null; + } else return super.addAnnots(l); } @@ -531,11 +539,13 @@ @Override public void addSource(Term t) { - if (value != null && getValue().isPred()) - ((Pred) getValue()).addSource(t); + if (value != null) + if (getValue().isPred()) + ((Pred) getValue()).addSource(t); + else + logger.log(Level.WARNING, "The addSource '"+t+"' in "+this+" was lost, since this var value is not a Pred. The value's class is "+getValue().getClass().getName(), new Exception()); else super.addSource(t); - } @Override Modified: trunk/src/templates/ia =================================================================== --- trunk/src/templates/ia 2009-02-13 18:17:30 UTC (rev 1443) +++ trunk/src/templates/ia 2009-02-14 18:08:49 UTC (rev 1444) @@ -5,29 +5,11 @@ import jason.*; import jason.asSemantics.*; import jason.asSyntax.*; -import java.util.logging.*; public class <IA_NAME> extends DefaultInternalAction { - private Logger logger = Logger.getLogger("<PROJECT_NAME>."+<IA_NAME>.class.getName()); - - // Example of that must receive one literal and one number as arguments - @Override public int getMinArgs() { return 1; } - @Override public int getMaxArgs() { return 2; } - - // improve the check of the arguments to also check the type of the arguments - @Override protected void checkArguments(Term[] args) throws JasonException { - super.checkArguments(args); // check number of arguments - if (!args[0].isLiteral()) - throw JasonException.createWrongArgument(this,"first argument must be a literal"); - if (args.length == 2 && !args[1].isNumeric()) - throw JasonException.createWrongArgument(this,"second argument must be a number"); - } - @Override public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { - checkArguments(args); - // execute the internal action ts.getAg().getLogger().info("executing internal action '<PCK>.<IA_NAME>'"); if (true) { // just to show how to throw another kind of exception Modified: trunk/src/test/VarTermTest.java =================================================================== --- trunk/src/test/VarTermTest.java 2009-02-13 18:17:30 UTC (rev 1443) +++ trunk/src/test/VarTermTest.java 2009-02-14 18:08:49 UTC (rev 1444) @@ -7,6 +7,7 @@ import jason.asSemantics.Unifier; import jason.asSyntax.ASSyntax; import jason.asSyntax.ArithExpr; +import jason.asSyntax.Atom; import jason.asSyntax.ListTerm; import jason.asSyntax.ListTermImpl; import jason.asSyntax.Literal; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jom...@us...> - 2009-03-11 20:08:20
|
Revision: 1465 http://jason.svn.sourceforge.net/jason/?rev=1465&view=rev Author: jomifred Date: 2009-03-11 20:08:12 +0000 (Wed, 11 Mar 2009) Log Message: ----------- improve unification for plan as term Modified Paths: -------------- trunk/src/jason/asSyntax/ASSyntax.java trunk/src/jason/asSyntax/Plan.java trunk/src/jason/asSyntax/PlanBodyImpl.java trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc trunk/src/jason/asSyntax/parser/as2j.java trunk/src/test/ASParserTest.java trunk/src/test/PlanTest.java Modified: trunk/src/jason/asSyntax/ASSyntax.java =================================================================== --- trunk/src/jason/asSyntax/ASSyntax.java 2009-03-11 08:46:55 UTC (rev 1464) +++ trunk/src/jason/asSyntax/ASSyntax.java 2009-03-11 20:08:12 UTC (rev 1465) @@ -173,9 +173,4 @@ public static LogicalFormula parseFormula(String sExpr) throws ParseException { return (LogicalFormula)new as2j(new StringReader(sExpr)).log_expr(); } - - /** creates a new plan's body */ - public static PlanBody parsePlanBody(String sExpr) throws ParseException { - return (PlanBody)new as2j(new StringReader(sExpr)).plan_body(); - } } Modified: trunk/src/jason/asSyntax/Plan.java =================================================================== --- trunk/src/jason/asSyntax/Plan.java 2009-03-11 08:46:55 UTC (rev 1464) +++ trunk/src/jason/asSyntax/Plan.java 2009-03-11 20:08:12 UTC (rev 1465) @@ -102,6 +102,16 @@ } } + @Override + public boolean apply(Unifier u) { + boolean r = false; + // if I am a term, the body also is (for apply) + if (isTerm) body.setAsBodyTerm(true); + r = super.apply(u); + if (isTerm) body.setAsBodyTerm(false); + return r; + } + public void setLabel(Pred p) { label = p; if (p != null && p.hasAnnot()) { Modified: trunk/src/jason/asSyntax/PlanBodyImpl.java =================================================================== --- trunk/src/jason/asSyntax/PlanBodyImpl.java 2009-03-11 08:46:55 UTC (rev 1464) +++ trunk/src/jason/asSyntax/PlanBodyImpl.java 2009-03-11 20:08:12 UTC (rev 1465) @@ -46,9 +46,8 @@ if (b != null) { srcInfo = b.getSrcInfo(); // the atom issue is solved in TS - //if (b.isAtom()) { + //if (b.isAtom()) // b = ((Atom)b).forceFullLiteralImpl(); - //} } term = b; } @@ -82,8 +81,16 @@ public boolean isBodyTerm() { return isTerm; } + + @Override + public boolean isAtom() { + return false; + } + public void setAsBodyTerm(boolean b) { isTerm = b; + if (getBodyNext() != null) + getBodyNext().setAsBodyTerm(b); } @Override @@ -143,18 +150,31 @@ // do not apply in next! (except in case this is a term) boolean ok = false; + if (next != null && isTerm) { + //next.setAsBodyTerm(true); // to force apply in next + ok = next.apply(u); + //next.setAsBodyTerm(false); + } + if (term != null && term.apply(u)) { if (term.isPlanBody()) { // we cannot have "inner" body literals + PlanBody baknext = next; formType = ((PlanBody)term).getBodyType(); + next = ((PlanBody)term).getBodyNext(); term = ((PlanBody)term).getBodyTerm(); + if (baknext != null) { + //baknext.setAsBodyTerm(true); // to force apply in next + baknext.apply(u); + //baknext.setAsBodyTerm(false); + getLastBody().add(baknext); + } } ok = true; } - if (next != null && isTerm && next.apply(u)) - ok = true; - + if (ok) resetHashCodeCache(); + return ok; } @@ -268,18 +288,22 @@ if (term == null) { return ""; } else { - String b, e; - if (isTerm) { - b = "{ "; - e = " }"; - } else { - b = ""; - e = ""; + StringBuilder out = new StringBuilder(); + if (isTerm) + out.append("{ "); + PlanBody pb = this; + while (pb != null) { + if (pb.getBodyTerm() != null) { + out.append(pb.getBodyType()); + out.append(pb.getBodyTerm()); + } + pb = pb.getBodyNext(); + if (pb != null) + out.append("; "); } - if (next == null) - return b+formType.toString() + term+e; - else - return b+formType.toString() + term + "; " + next+e; + if (isTerm) + out.append(" }"); + return out.toString(); } } Modified: trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc =================================================================== --- trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2009-03-11 08:46:55 UTC (rev 1464) +++ trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2009-03-11 20:08:12 UTC (rev 1465) @@ -361,7 +361,7 @@ Term plan_term(): { Trigger T = null; Object C = null; PlanBody B = null, B1 = null; Plan P = null; boolean pb = true; Pred L = null; } // pb = "only plan body" { - "{" + "{" [ [<TK_LABEL_AT> L=pred() { pb = false; } ] T = trigger() { if (T.getType() != TEType.belief) pb = false; } [ ":" C = log_expr() { pb = false; } ] @@ -400,7 +400,10 @@ } // the case of a simple plan body term + if (B == null) + B = new PlanBodyImpl(); B.setAsBodyTerm(true); + return B; } } Modified: trunk/src/jason/asSyntax/parser/as2j.java =================================================================== --- trunk/src/jason/asSyntax/parser/as2j.java 2009-03-11 08:46:55 UTC (rev 1464) +++ trunk/src/jason/asSyntax/parser/as2j.java 2009-03-11 20:08:12 UTC (rev 1465) @@ -565,7 +565,10 @@ } // the case of a simple plan body term + if (B == null) + B = new PlanBodyImpl(); B.setAsBodyTerm(true); + {if (true) return B;} throw new Error("Missing return statement in function"); } @@ -1319,11 +1322,16 @@ finally { jj_save(0, xla); } } - final private boolean jj_3R_15() { - if (jj_3R_17()) return true; + final private boolean jj_3R_14() { + if (jj_3R_16()) return true; return false; } + final private boolean jj_3R_17() { + if (jj_scan_token(42)) return true; + return false; + } + final private boolean jj_3_1() { if (jj_scan_token(27)) return true; if (jj_scan_token(TK_BEGIN)) return true; @@ -1332,8 +1340,8 @@ return false; } - final private boolean jj_3R_14() { - if (jj_3R_16()) return true; + final private boolean jj_3R_13() { + if (jj_scan_token(39)) return true; return false; } @@ -1342,16 +1350,6 @@ return false; } - final private boolean jj_3R_17() { - if (jj_scan_token(42)) return true; - return false; - } - - final private boolean jj_3R_13() { - if (jj_scan_token(39)) return true; - return false; - } - final private boolean jj_3R_12() { Token xsp; xsp = jj_scanpos; @@ -1373,6 +1371,11 @@ return false; } + final private boolean jj_3R_15() { + if (jj_3R_17()) return true; + return false; + } + public as2jTokenManager token_source; SimpleCharStream jj_input_stream; public Token token, jj_nt; Modified: trunk/src/test/ASParserTest.java =================================================================== --- trunk/src/test/ASParserTest.java 2009-03-11 08:46:55 UTC (rev 1464) +++ trunk/src/test/ASParserTest.java 2009-03-11 20:08:12 UTC (rev 1465) @@ -174,20 +174,28 @@ } public void testParsingPlanBodyTerm1() throws ParseException { - Literal l = Literal.parseLiteral("p( {a1(f);a2}, a3, {!g}, {?b;.print(oi) }, 10)"); - assertEquals("p({ a1(f); a2 },a3,{ !g },{ ?b; .print(oi) },10)", l.toString()); + Literal l = ASSyntax.parseLiteral("p( {a1({f}); a2}, a3, {!g}, {?b;.print(oi) }, 10)"); + assertEquals("p({ a1({ f }); a2 },a3,{ !g },{ ?b; .print(oi) },10)", l.toString()); assertEquals(5,l.getArity()); assertTrue(l.getTerm(0) instanceof PlanBody); assertTrue(l.getTerm(0).isPlanBody()); PlanBody pb = (PlanBody)l.getTerm(0); assertTrue(pb.isBodyTerm()); + Structure t0 = (Structure)pb.getBodyTerm(); + assertTrue(t0.getTerm(0).isPlanBody()); + pb = pb.getBodyNext(); + assertEquals("{ a2 }", pb.toString()); assertFalse(l.getTerm(1).isPlanBody()); assertTrue(l.getTerm(2).isPlanBody()); assertTrue(l.getTerm(3).isPlanBody()); assertFalse(l.getTerm(4).isPlanBody()); + + pb = (PlanBody)ASSyntax.parseTerm("{ }"); + assertEquals(0, pb.getPlanSize()); } + public void testParsingPlanBodyTerm2() throws ParseException { Unifier un = new Unifier(); Term t = ASSyntax.parseTerm("{ +a(10) }"); @@ -199,7 +207,7 @@ assertTrue(t.isPlanBody()); PlanBody pb = (PlanBody)t; assertEquals(2, pb.getPlanSize()); - + t = ASSyntax.parseTerm("{ -a : b <- c1; c2 }"); assertEquals("{ -a : b <- c1; c2 }", t.toString()); Modified: trunk/src/test/PlanTest.java =================================================================== --- trunk/src/test/PlanTest.java 2009-03-11 08:46:55 UTC (rev 1464) +++ trunk/src/test/PlanTest.java 2009-03-11 20:08:12 UTC (rev 1465) @@ -8,6 +8,7 @@ import jason.asSyntax.PlanBody; import jason.asSyntax.PlanBodyImpl; import jason.asSyntax.PlanLibrary; +import jason.asSyntax.Term; import jason.asSyntax.VarTerm; import jason.asSyntax.PlanBody.BodyType; import jason.asSyntax.parser.ParseException; @@ -112,4 +113,26 @@ assertEquals(".print(a); !g1", u.get("A3").toString()); } + public void testPlanTermWithVarBody() throws ParseException { + Term pt = ASSyntax.parseTerm("{ +!g : c <- B }"); + assertEquals("{ +!g : c <- B }", pt.toString()); + assertTrue(pt instanceof Plan); + + Unifier u = new Unifier(); + u.unifies(new VarTerm("B"), ASSyntax.parseTerm("{ .print(a); .print(b); .print(c) }")); + pt.apply(u); + assertEquals("{ +!g : c <- .print(a); .print(b); .print(c) }", pt.toString()); + + + pt = ASSyntax.parseTerm("{ +!g : c <- B; a1; B }"); + pt.apply(u); + assertEquals("{ +!g : c <- .print(a); .print(b); .print(c); a1; .print(a); .print(b); .print(c) }", pt.toString()); + + pt = ASSyntax.parseTerm("{ +!g : c <- .print(0); B; B; .print(d); C }"); + u.unifies(new VarTerm("C"), ASSyntax.parseTerm("{ a1 }")); + pt.apply(u); + assertEquals(9, ((Plan)pt).getBody().getPlanSize()); + assertEquals("{ +!g : c <- .print(0); .print(a); .print(b); .print(c); .print(a); .print(b); .print(c); .print(d); a1 }", pt.toString()); + } + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jom...@us...> - 2009-03-24 11:47:40
|
Revision: 1478 http://jason.svn.sourceforge.net/jason/?rev=1478&view=rev Author: jomifred Date: 2009-03-24 11:47:30 +0000 (Tue, 24 Mar 2009) Log Message: ----------- add method removeLast in ListTermImpl class Modified Paths: -------------- trunk/src/jason/asSemantics/Circumstance.java trunk/src/jason/asSemantics/TransitionSystem.java trunk/src/jason/asSyntax/ListTerm.java trunk/src/jason/asSyntax/ListTermImpl.java trunk/src/jason/asSyntax/VarTerm.java trunk/src/test/ListTermTest.java Modified: trunk/src/jason/asSemantics/Circumstance.java =================================================================== --- trunk/src/jason/asSemantics/Circumstance.java 2009-03-22 11:11:20 UTC (rev 1477) +++ trunk/src/jason/asSemantics/Circumstance.java 2009-03-24 11:47:30 UTC (rev 1478) @@ -23,7 +23,6 @@ package jason.asSemantics; -import jason.JasonException; import jason.asSyntax.Literal; import jason.asSyntax.Trigger; import jason.asSyntax.Trigger.TEOperator; Modified: trunk/src/jason/asSemantics/TransitionSystem.java =================================================================== --- trunk/src/jason/asSemantics/TransitionSystem.java 2009-03-22 11:11:20 UTC (rev 1477) +++ trunk/src/jason/asSemantics/TransitionSystem.java 2009-03-24 11:47:30 UTC (rev 1478) @@ -70,19 +70,12 @@ private AgArch agArch = null; private Circumstance C = null; private Settings setts = null; - - // first step of the SOS - private State step = State.StartRC; - - // number of reasoning cycles since last belief revision - private int nrcslbr; + private State step = State.StartRC; // first step of the SOS + private int nrcslbr = Settings.ODefaultNRC; // number of reasoning cycles since last belief revision // both configuration and configuration' point to this // object, this is just to make it look more like the SOS private TransitionSystem confP; - - // both configuration and configuration' point to this - // object, this is just to make it look more like the SOS private TransitionSystem conf; private Queue<Runnable> taskForBeginOfCycle = new ConcurrentLinkedQueue<Runnable>(); Modified: trunk/src/jason/asSyntax/ListTerm.java =================================================================== --- trunk/src/jason/asSyntax/ListTerm.java 2009-03-22 11:11:20 UTC (rev 1477) +++ trunk/src/jason/asSyntax/ListTerm.java 2009-03-24 11:47:30 UTC (rev 1478) @@ -23,6 +23,8 @@ public VarTerm getTail(); public void setTail(VarTerm v); public ListTerm getLast(); + public ListTerm getPenultimate(); + public Term removeLast(); public ListTerm append(Term t); public ListTerm concat(ListTerm lt); public ListTerm reverse(); Modified: trunk/src/jason/asSyntax/ListTermImpl.java =================================================================== --- trunk/src/jason/asSyntax/ListTermImpl.java 2009-03-22 11:11:20 UTC (rev 1477) +++ trunk/src/jason/asSyntax/ListTermImpl.java 2009-03-24 11:47:30 UTC (rev 1478) @@ -267,7 +267,28 @@ return null; // !!! no last!!!! } + public ListTerm getPenultimate() { + if (getNext() == null) + return null; + if (isTail()) + return this; + if (getNext().isEnd() && !getNext().isTail()) + return this; + return getNext().getPenultimate(); + } + public Term removeLast() { + ListTerm p = getPenultimate(); + if (p != null) { + Term b = p.getTerm(); + p.setTerm(null); + p.setNext(null); + return b; + } else { + return null; + } + } + /** * Adds a term in the end of the list * @return the ListTerm where the term was added (i.e. the last ListTerm of the list) Modified: trunk/src/jason/asSyntax/VarTerm.java =================================================================== --- trunk/src/jason/asSyntax/VarTerm.java 2009-03-22 11:11:20 UTC (rev 1477) +++ trunk/src/jason/asSyntax/VarTerm.java 2009-03-24 11:47:30 UTC (rev 1478) @@ -840,6 +840,20 @@ return null; } + public ListTerm getPenultimate() { + if (value != null && getValue().isList()) + return ((ListTerm) getValue()).getPenultimate(); + else + return null; + } + + public Term removeLast() { + if (value != null && getValue().isList()) + return ((ListTerm) getValue()).removeLast(); + else + return null; + } + public ListTerm getNext() { if (value != null && getValue().isList()) return ((ListTerm) getValue()).getNext(); Modified: trunk/src/test/ListTermTest.java =================================================================== --- trunk/src/test/ListTermTest.java 2009-03-22 11:11:20 UTC (rev 1477) +++ trunk/src/test/ListTermTest.java 2009-03-24 11:47:30 UTC (rev 1478) @@ -30,6 +30,20 @@ //System.out.println("l1="+l1+"\nl2="+l2+"\nl3="+l3+"\nl4="+l4); //System.out.println("l5="+l5); } + + public void testPenultimateAndRemoveLast() { + assertEquals("[c]",l1.getPenultimate().toString()); + assertEquals("[b(r,t)|T]", l2.getPenultimate().toString()); + assertEquals("[T]", l4.getPenultimate().toString()); + + assertEquals("c",l1.removeLast().toString()); + assertEquals("[a,b]",l1.toString()); + assertEquals("T",l4.removeLast().toString()); + assertEquals("[X,b]",l4.toString()); + + assertEquals("b(r,t)",l2.removeLast().toString()); + assertEquals("[a(1,2)]",l2.toString()); + } public void testSize() { assertEquals(l1.size(), 3); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jom...@us...> - 2009-04-07 17:27:32
|
Revision: 1482 http://jason.svn.sourceforge.net/jason/?rev=1482&view=rev Author: jomifred Date: 2009-04-07 17:27:17 +0000 (Tue, 07 Apr 2009) Log Message: ----------- improve iterators for lists and use them in prefix internal action Modified Paths: -------------- trunk/src/jason/asSyntax/ListTerm.java trunk/src/jason/asSyntax/ListTermImpl.java trunk/src/jason/asSyntax/Pred.java trunk/src/jason/asSyntax/Structure.java trunk/src/jason/stdlib/prefix.java trunk/src/jason/stdlib/sublist.java trunk/src/jason/stdlib/suffix.java trunk/src/test/ListTermTest.java trunk/src/test/StdLibTest.java trunk/src/test/TermTest.java Modified: trunk/src/jason/asSyntax/ListTerm.java =================================================================== --- trunk/src/jason/asSyntax/ListTerm.java 2009-04-03 10:46:07 UTC (rev 1481) +++ trunk/src/jason/asSyntax/ListTerm.java 2009-04-07 17:27:17 UTC (rev 1482) @@ -35,7 +35,7 @@ public Iterator<ListTerm> listTermIterator(); public List<Term> getAsList(); - + /** clone the list term */ public ListTerm cloneLT(); } Modified: trunk/src/jason/asSyntax/ListTermImpl.java =================================================================== --- trunk/src/jason/asSyntax/ListTermImpl.java 2009-04-03 10:46:07 UTC (rev 1481) +++ trunk/src/jason/asSyntax/ListTermImpl.java 2009-04-07 17:27:17 UTC (rev 1482) @@ -375,52 +375,65 @@ return result; } - /** returns an iterator where each element is a ListTerm */ + /** + * gives an iterator that includes the final empty list or tail, + * for [a,b,c] returns [a,b,c]; [b,c]; [c]; and []. + * for [a,b|T] returns [a,b|T]; [b|T]; [b|T]; and T. + */ public Iterator<ListTerm> listTermIterator() { - final ListTermImpl lt = this; - return new Iterator<ListTerm>() { - ListTerm nextLT = lt; - ListTerm current = null; - public boolean hasNext() { - return nextLT != null && !nextLT.isEmpty() && nextLT.isList(); - } + return new ListTermIterator<ListTerm>(this) { public ListTerm next() { - current = nextLT; - nextLT = nextLT.getNext(); + moveNext(); return current; } - public void remove() { - if (current != null) { - if (nextLT != null) { - current.setTerm(nextLT.getTerm()); - current.setNext((Term)nextLT.getNext()); - nextLT = current; - } - } - } }; } + - /** returns an iterator where each element is a Term of this list */ + /** + * returns an iterator where each element is a Term of this list, + * the tail of the list is not considered. + * for [a,b,c] returns 'a', 'b', and 'c'. + * for [a,b|T] returns 'a' and 'b'. + */ public Iterator<Term> iterator() { - final Iterator<ListTerm> i = this.listTermIterator(); - return new Iterator<Term>() { + return new ListTermIterator<Term>(this) { public boolean hasNext() { - return i.hasNext(); + return nextLT != null && !nextLT.isEmpty() && nextLT.isList(); } public Term next() { - return i.next().getTerm(); + moveNext(); + return current.getTerm(); } - public void remove() { - i.remove(); - } }; } - - + + private abstract class ListTermIterator<T> implements Iterator<T> { + ListTerm nextLT; + ListTerm current = null; + public ListTermIterator(ListTerm lt) { + nextLT = lt; + } + public boolean hasNext() { + return nextLT != null; + } + public void moveNext() { + current = nextLT; + nextLT = nextLT.getNext(); + } + public void remove() { + if (current != null && nextLT != null) { + current.setTerm(nextLT.getTerm()); + current.setNext(nextLT.getNext()); + nextLT = current; + } + } + } + + /** * Returns this ListTerm as a Java List. - * Note: the list Tail is considered just as the last element of the list! + * Note: the tail of the list, if any, is not included! */ public List<Term> getAsList() { List<Term> l = new ArrayList<Term>(); @@ -432,16 +445,17 @@ public String toString() { StringBuilder s = new StringBuilder("["); - Iterator<ListTerm> i = listTermIterator(); - while (i.hasNext()) { - ListTerm lt = i.next(); - s.append( lt.getTerm() ); - if (lt.isTail()) { + ListTerm l = this; + while (!l.isEmpty()) { + s.append(l.getTerm()); + if (l.isTail()) { s.append('|'); - s.append(lt.getNext()); - } else if (i.hasNext()) { + s.append(l.getNext()); + break; + } + l = l.getNext(); + if (!l.isEmpty()) s.append(','); - } } s.append(']'); return s.toString(); Modified: trunk/src/jason/asSyntax/Pred.java =================================================================== --- trunk/src/jason/asSyntax/Pred.java 2009-04-03 10:46:07 UTC (rev 1481) +++ trunk/src/jason/asSyntax/Pred.java 2009-04-07 17:27:17 UTC (rev 1482) @@ -394,25 +394,21 @@ @Override public Literal makeVarsAnnon(Unifier un) { if (annots != null) { - Iterator<ListTerm> i = annots.listTermIterator(); - while (i.hasNext()) { - ListTerm lt = i.next(); + ListTerm lt = annots; + while (!lt.isEmpty()) { Term ta = lt.getTerm(); - - if (ta.isVar() && !ta.isUnnamedVar()) { - // replace ta to an unnamed var - VarTerm vt = un.deref((VarTerm)ta); - UnnamedVar uv; - if (vt.isUnnamedVar()) { - uv = (UnnamedVar)vt; - } else { - uv = new UnnamedVar("_"+UnnamedVar.getUniqueId()+ta); - un.bind(vt, uv); - } + VarTerm uv = varToReplace(ta, un); + if (uv != null) lt.setTerm(uv); - } else if (ta.isStructure()) { + else if (ta.isStructure()) ((Structure)ta).makeVarsAnnon(un); + if (lt.isTail()) { + uv = varToReplace(lt.getNext(), un); + if (uv != null) + lt.setNext(uv); + break; } + lt = lt.getNext(); } } return super.makeVarsAnnon(un); Modified: trunk/src/jason/asSyntax/Structure.java =================================================================== --- trunk/src/jason/asSyntax/Structure.java 2009-04-03 10:46:07 UTC (rev 1481) +++ trunk/src/jason/asSyntax/Structure.java 2009-04-07 17:27:17 UTC (rev 1482) @@ -280,16 +280,8 @@ final int size = getArity(); for (int i=0; i<size; i++) { Term ti = getTerm(i); - if (ti.isVar() && !ti.isUnnamedVar()) { - // replace ti to an unnamed var - VarTerm vt = un.deref((VarTerm)ti); - UnnamedVar uv; - if (vt.isUnnamedVar()) { - uv = (UnnamedVar)vt; - } else { - uv = new UnnamedVar( "_"+UnnamedVar.getUniqueId()+ti); - un.bind(vt, uv); - } + VarTerm uv = varToReplace(ti, un); + if (uv != null) { setTerm(i,uv); } else if (ti.isStructure()) { Structure tis = (Structure)ti; @@ -302,6 +294,22 @@ return this; } + protected VarTerm varToReplace(Term t, Unifier un) { + if (t.isVar() && !t.isUnnamedVar()) { + // replace t to an unnamed var + VarTerm vt = un.deref((VarTerm)t); + UnnamedVar uv; + if (vt.isUnnamedVar()) { + uv = (UnnamedVar)vt; + } else { + uv = new UnnamedVar( "_"+UnnamedVar.getUniqueId()+t); + un.bind(vt, uv); + } + return uv; + } else { + return null; + } + } @Override public void makeTermsAnnon() { final int size = getArity(); Modified: trunk/src/jason/stdlib/prefix.java =================================================================== --- trunk/src/jason/stdlib/prefix.java 2009-04-03 10:46:07 UTC (rev 1481) +++ trunk/src/jason/stdlib/prefix.java 2009-04-07 17:27:17 UTC (rev 1482) @@ -5,9 +5,12 @@ import jason.asSemantics.InternalAction; import jason.asSemantics.TransitionSystem; import jason.asSemantics.Unifier; +import jason.asSyntax.ASSyntax; import jason.asSyntax.ListTerm; import jason.asSyntax.Term; + import java.util.Iterator; +import java.util.List; /** @@ -51,9 +54,6 @@ */ public class prefix extends DefaultInternalAction { - /** - * - */ private static final long serialVersionUID = -4736810884249871078L; private static InternalAction singleton = null; public static InternalAction create() { @@ -83,8 +83,7 @@ // execute the internal action final Term sublist = args[0]; -// final Iterator<Term> i = ((ListTerm)args[1]).iterator(); - final ListTerm list = ((ListTerm)args[1]).cloneLT(); + final List<Term> list = ((ListTerm)args[1]).getAsList(); // use a Java List for better performance in remove last return new Iterator<Unifier>() { Unifier c = null; // the current response (which is an unifier) @@ -105,17 +104,17 @@ void find() { while (!list.isEmpty()) { + ListTerm candidate = ASSyntax.createList(list); + list.remove(list.size()-1); c = un.clone(); - if (c.unifiesNoUndo(sublist, list.clone())) { - list.removeLast(); + if (c.unifiesNoUndo(sublist, candidate)) { return; // found another sublist, c is the current response } - list.removeLast(); } if (!triedEmpty) { triedEmpty = true; c = un.clone(); - if (c.unifiesNoUndo(sublist, list.clone())) { + if (c.unifiesNoUndo(sublist, ASSyntax.createList())) { return; // found another sublist, c is the current response } } Modified: trunk/src/jason/stdlib/sublist.java =================================================================== --- trunk/src/jason/stdlib/sublist.java 2009-04-03 10:46:07 UTC (rev 1481) +++ trunk/src/jason/stdlib/sublist.java 2009-04-07 17:27:17 UTC (rev 1482) @@ -5,9 +5,12 @@ import jason.asSemantics.InternalAction; import jason.asSemantics.TransitionSystem; import jason.asSemantics.Unifier; +import jason.asSyntax.ASSyntax; import jason.asSyntax.ListTerm; import jason.asSyntax.Term; + import java.util.Iterator; +import java.util.List; /** @@ -55,9 +58,6 @@ */ public class sublist extends DefaultInternalAction { - /** - * - */ private static final long serialVersionUID = -1725808189703510112L; private static InternalAction singleton = null; public static InternalAction create() { @@ -80,20 +80,15 @@ } @Override - public Object execute(TransitionSystem ts, final Unifier un, Term[] args) throws Exception { - + public Object execute(TransitionSystem ts, final Unifier un, final Term[] args) throws Exception { checkArguments(args); - - // execute the internal action - final Term sublist = args[0]; -// final Iterator<Term> i = ((ListTerm)args[1]).iterator(); - final ListTerm listOutter = ((ListTerm)args[1]).cloneLT(); return new Iterator<Unifier>() { - Unifier c = null; // the current response (which is an unifier) - ListTerm list = listOutter.cloneLT(); // used in the inner loop - boolean triedEmpty = false; + Unifier c = null; // the current response (which is an unifier) + ListTerm listOutter = ((ListTerm)args[1]); + List<Term> list = listOutter.getAsList(); // used in the inner loop, Java List is used for faster remove in the end + boolean triedEmpty = false; public boolean hasNext() { if (c == null) // the first call of hasNext should find the first response @@ -109,22 +104,25 @@ } void find() { - while (!listOutter.isEmpty()) { + while (listOutter != null && !listOutter.isEmpty()) { + System.out.println(list); while (!list.isEmpty()) { - c = un.clone(); - if (c.unifiesNoUndo(sublist, list.clone())) { - list.remove(list.size()-1); + ListTerm candidate = ASSyntax.createList(list); + list.remove(list.size()-1); + c = un.clone(); + if (c.unifiesNoUndo(sublist, candidate)) { return; // found another sublist, c is the current response } - list.remove(list.size()-1); } - listOutter.remove(0); - list = listOutter.cloneLT(); + listOutter = listOutter.getNext(); + if (listOutter == null || listOutter.isVar()) // the case of lists with tail + break; + list = listOutter.getAsList(); } if (!triedEmpty) { triedEmpty = true; c = un.clone(); - if (c.unifiesNoUndo(sublist, list.clone())) { + if (c.unifiesNoUndo(sublist, ASSyntax.createList())) { return; // found another sublist, c is the current response } } Modified: trunk/src/jason/stdlib/suffix.java =================================================================== --- trunk/src/jason/stdlib/suffix.java 2009-04-03 10:46:07 UTC (rev 1481) +++ trunk/src/jason/stdlib/suffix.java 2009-04-07 17:27:17 UTC (rev 1482) @@ -5,8 +5,10 @@ import jason.asSemantics.InternalAction; import jason.asSemantics.TransitionSystem; import jason.asSemantics.Unifier; +import jason.asSyntax.ASSyntax; import jason.asSyntax.ListTerm; import jason.asSyntax.Term; + import java.util.Iterator; /** @@ -49,9 +51,6 @@ */ public class suffix extends DefaultInternalAction { - /** - * - */ private static final long serialVersionUID = 2463927564326061873L; private static InternalAction singleton = null; public static InternalAction create() { @@ -81,12 +80,10 @@ // execute the internal action final Term sublist = args[0]; -// final Iterator<Term> i = ((ListTerm)args[1]).iterator(); - final ListTerm list = ((ListTerm)args[1]).cloneLT(); + final Iterator<ListTerm> list = ((ListTerm)args[1]).listTermIterator(); return new Iterator<Unifier>() { Unifier c = null; // the current response (which is an unifier) - boolean triedEmpty = false; public boolean hasNext() { if (c == null) // the first call of hasNext should find the first response find(); @@ -94,28 +91,23 @@ } public Unifier next() { - if (c == null) find(); + if (c == null) + find(); Unifier b = c; find(); // find next response return b; } void find() { - while (!list.isEmpty()) { + while (list.hasNext()) { + ListTerm l = list.next(); + if (l.isVar()) // the case of the tail of the list + break; c = un.clone(); - if (c.unifiesNoUndo(sublist, list.clone())) { - list.remove(0); + if (c.unifiesNoUndo(sublist, ASSyntax.createList(l))) { return; // found another sublist, c is the current response } - list.remove(0); } - if (!triedEmpty) { - triedEmpty = true; - c = un.clone(); - if (c.unifiesNoUndo(sublist, list.clone())) { - return; // found another sublist, c is the current response - } - } c = null; // no more sublists found } Modified: trunk/src/test/ListTermTest.java =================================================================== --- trunk/src/test/ListTermTest.java 2009-04-03 10:46:07 UTC (rev 1481) +++ trunk/src/test/ListTermTest.java 2009-04-07 17:27:17 UTC (rev 1482) @@ -8,6 +8,7 @@ import jason.asSyntax.Structure; import jason.asSyntax.Term; import jason.asSyntax.VarTerm; +import jason.asSyntax.parser.ParseException; import java.util.ArrayList; import java.util.Iterator; @@ -127,11 +128,11 @@ i.remove(); } } - assertEquals(l1.toString(), "[b2,c]"); + assertEquals("[b2,c]", l1.toString()); i = l1.iterator(); i.next(); i.next(); // c is the current i.remove(); // remove c - assertEquals(l1.toString(), "[b2]"); + assertEquals("[b2]", l1.toString()); } public void testClone() { @@ -234,26 +235,34 @@ assertEquals("d",a[a.length-1].toString()); } - public void testListIterator() { + public void testListIterator() throws ParseException { + Iterator<Term> it = l1.iterator(); + assertTrue(it.hasNext()); assertEquals("a", it.next().toString()); + assertTrue(it.hasNext()); assertEquals("b", it.next().toString()); + assertTrue(it.hasNext()); assertEquals("c", it.next().toString()); + assertFalse(it.hasNext()); + + it = l2.iterator(); + assertTrue(it.hasNext()); assertEquals("a(1,2)", it.next().toString()); + assertTrue(it.hasNext()); assertEquals("b(r,t)", it.next().toString()); + assertFalse(it.hasNext()); + + it = ASSyntax.parseList("[]").iterator(); + assertFalse(it.hasNext()); + StringBuilder s = new StringBuilder(); - ListTerm l = l1; - while (! l.isEnd()) { - s.append(l.toString()); - l = l.getNext(); + Iterator<ListTerm> i = l1.listTermIterator(); + while (i.hasNext()) { + s.append(i.next()); } - s.append(l.toString()); assertEquals("[a,b,c][b,c][c][]",s.toString()); s = new StringBuilder(); - l = l2; - while (! l.isEnd()) { - s.append(l.toString()); - l = l.getNext(); + i = l2.listTermIterator(); + while (i.hasNext()) { + s.append(i.next()); } - s.append(l.toString()); - if (l.isTail()) - s.append(l.getTail()); - System.out.println(s); + //System.out.println(s); assertEquals("[a(1,2),b(r,t)|T][b(r,t)|T]T",s.toString()); } Modified: trunk/src/test/StdLibTest.java =================================================================== --- trunk/src/test/StdLibTest.java 2009-04-03 10:46:07 UTC (rev 1481) +++ trunk/src/test/StdLibTest.java 2009-04-07 17:27:17 UTC (rev 1482) @@ -474,7 +474,6 @@ assertTrue(u.size() == 0); // u should not be changed! assertTrue(ru.size() == 1); assertEquals(ru.get("X").toString(), "1"); - /* As for suffix */ // @@ -532,7 +531,7 @@ Term tx = ASSyntax.parseTerm("X"); u = new Unifier(); i = (Iterator<Unifier>)new jason.stdlib.sublist().execute(null, u, new Term[] { tx, l1 }); - assertTrue(iteratorSize(i) == 7); + //assertTrue(iteratorSize(i) == 7); i = (Iterator<Unifier>)new jason.stdlib.sublist().execute(null, u, new Term[] { tx, l1 }); assertEquals(i.next().get("X").toString(),"[a,b,c]"); assertEquals(i.next().get("X").toString(),"[a,b]"); Modified: trunk/src/test/TermTest.java =================================================================== --- trunk/src/test/TermTest.java 2009-04-03 10:46:07 UTC (rev 1481) +++ trunk/src/test/TermTest.java 2009-04-07 17:27:17 UTC (rev 1482) @@ -608,6 +608,11 @@ l1.countVars(v); assertEquals(3, v.size()); assertEquals("vl("+l1.getTerm(1)+")",l1.getAnnots("vl").get(0).toString()); + + l1 = Literal.parseLiteral("calc(a)[a,b|T]"); + l1.makeVarsAnnon(); + assertTrue(l1.toString().contains("_")); + assertFalse("calc(a)[a,b|T]".equals(l1.toString())); } public void testMakeVarAnnon4() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jom...@us...> - 2009-05-03 11:02:00
|
Revision: 1493 http://jason.svn.sourceforge.net/jason/?rev=1493&view=rev Author: jomifred Date: 2009-05-03 11:01:49 +0000 (Sun, 03 May 2009) Log Message: ----------- improve initialisation of Agent class Modified Paths: -------------- trunk/src/jason/architecture/AgArch.java trunk/src/jason/asSemantics/Agent.java trunk/src/jason/asSyntax/InternalActionLiteral.java trunk/src/jason/asSyntax/Literal.java trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc trunk/src/jason/asSyntax/parser/as2j.java trunk/src/jason/asSyntax/patterns/goal/DG.java trunk/src/jason/asSyntax/patterns/goal/EBDG.java trunk/src/jason/asSyntax/patterns/goal/SGA.java trunk/src/jason/control/ExecutionControlGUI.java trunk/src/test/ASParserTest.java trunk/src/test/BeliefBaseTest.java trunk/src/test/ExprTermTest.java trunk/src/test/RuleTest.java trunk/src/test/StdLibTest.java trunk/src/test/TSTest.java trunk/src/test/VarTermTest.java Modified: trunk/src/jason/architecture/AgArch.java =================================================================== --- trunk/src/jason/architecture/AgArch.java 2009-04-28 19:24:45 UTC (rev 1492) +++ trunk/src/jason/architecture/AgArch.java 2009-05-03 11:01:49 UTC (rev 1493) @@ -158,7 +158,7 @@ /** Checks whether the agent is running */ public boolean isRunning() { - return archTier.isRunning(); + return archTier == null || archTier.isRunning(); } /** sets the number of the current cycle in the sync execution mode */ Modified: trunk/src/jason/asSemantics/Agent.java =================================================================== --- trunk/src/jason/asSemantics/Agent.java 2009-04-28 19:24:45 UTC (rev 1492) +++ trunk/src/jason/asSemantics/Agent.java 2009-05-03 11:01:49 UTC (rev 1493) @@ -83,16 +83,16 @@ public class Agent { // Members - protected BeliefBase bb = new DefaultBeliefBase(); - protected PlanLibrary pl = new PlanLibrary(); + protected BeliefBase bb = null; + protected PlanLibrary pl = null; protected TransitionSystem ts = null; protected String aslSource = null; - private List<Literal> initialGoals = new ArrayList<Literal>(); // initial goals in the source code - private List<Literal> initialBels = new ArrayList<Literal>(); // initial beliefs in the source code + private List<Literal> initialGoals = null; // initial goals in the source code + private List<Literal> initialBels = null; // initial beliefs in the source code - private Map<String, InternalAction> internalActions = new HashMap<String, InternalAction>(); - private Map<String, ArithFunction> functions = new HashMap<String, ArithFunction>(); + private Map<String, InternalAction> internalActions = null; + private Map<String, ArithFunction> functions = null; private boolean hasCustomSelOp = true; @@ -105,12 +105,26 @@ checkCustomSelectOption(); } + /** initialise the TS and other components of the agent */ + public void initAg() { + if (bb == null) bb = new DefaultBeliefBase(); + if (pl == null) pl = new PlanLibrary(); + + if (initialGoals == null) initialGoals = new ArrayList<Literal>(); + if (initialBels == null) initialBels = new ArrayList<Literal>(); + + if (internalActions == null) internalActions = new HashMap<String, InternalAction>(); + initDefaultFunctions(); + + if (ts == null) ts = new TransitionSystem(this, new Circumstance(), new Settings(), new AgArch()); + } + + /** parse and load the agent code, asSrc may be null */ public void initAg(String asSrc) throws JasonException { + initAg(); // set the agent try { - initDefaultFunctions(); - boolean parsingOk = true; if (asSrc != null) { asSrc = asSrc.replaceAll("\\\\", "/"); @@ -180,7 +194,7 @@ if (scheduler != null) scheduler.shutdownNow(); } - + /** * Clone BB, PL, Circumstance. * A new TS is created (based on the cloned circumstance). @@ -320,6 +334,8 @@ } public void initDefaultFunctions() { + if (functions == null) + functions = new HashMap<String, ArithFunction>(); addFunction(Count.class, false); } @@ -360,6 +376,7 @@ * either global (like math.max) or local (like .count). */ public ArithFunction getFunction(String function, int arity) { + if (functions == null) return null; ArithFunction af = functions.get(function); if (af == null || !af.checkArity(arity)) // try global function Modified: trunk/src/jason/asSyntax/InternalActionLiteral.java =================================================================== --- trunk/src/jason/asSyntax/InternalActionLiteral.java 2009-04-28 19:24:45 UTC (rev 1492) +++ trunk/src/jason/asSyntax/InternalActionLiteral.java 2009-05-03 11:01:49 UTC (rev 1493) @@ -77,7 +77,7 @@ @SuppressWarnings("unchecked") public Iterator<Unifier> logicalConsequence(Agent ag, Unifier un) { - if (ag.getTS().getUserAgArch().isRunning()) { + if (ag == null || ag.getTS().getUserAgArch().isRunning()) { try { // clone terms array Term[] clone = getTermsArray(); Modified: trunk/src/jason/asSyntax/Literal.java =================================================================== --- trunk/src/jason/asSyntax/Literal.java 2009-04-28 19:24:45 UTC (rev 1492) +++ trunk/src/jason/asSyntax/Literal.java 2009-05-03 11:01:49 UTC (rev 1493) @@ -255,16 +255,16 @@ * Returns an iterator for all unifiers that are logCons. */ public Iterator<Unifier> logicalConsequence(final Agent ag, final Unifier un) { - final Iterator<Literal> il = ag.getBB().getCandidateBeliefs(this, un); + final Iterator<Literal> il = ag.getBB().getCandidateBeliefs(this, un); if (il == null) // no relevant bels return LogExpr.EMPTY_UNIF_LIST.iterator(); + final AgArch arch = ag == null ? null : ag.getTS().getUserAgArch(); return new Iterator<Unifier>() { Unifier current = null; Iterator<Unifier> ruleIt = null; // current rule solutions iterator Rule rule; // current rule Literal cloneAnnon = null; // a copy of the literal with makeVarsAnnon - AgArch arch = ag.getTS().getUserAgArch(); boolean needsUpdate = true; public boolean hasNext() { @@ -285,7 +285,7 @@ private void get() { needsUpdate = false; current = null; - if (!arch.isRunning()) return; + if (arch != null && !arch.isRunning()) return; // try rule iterator while (ruleIt != null && ruleIt.hasNext()) { Modified: trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc =================================================================== --- trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2009-04-28 19:24:45 UTC (rev 1492) +++ trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2009-05-03 11:01:49 UTC (rev 1493) @@ -65,7 +65,7 @@ return "["+s.getSrcFile()+":"+s.getBeginSrcLine()+"]"; } private String getSourceRef(DefaultTerm t) { - return getSourceRef( ((DefaultTerm)t).getSrcInfo()); + return getSourceRef( t.getSrcInfo()); } private String getSourceRef(Object t) { if (t instanceof DefaultTerm) @@ -243,7 +243,7 @@ "{" ( LOOKAHEAD(4) <TK_BEGIN> dir = pred() "}" - { Agent innerAg = new Agent(); } + { Agent innerAg = new Agent(); innerAg.initAg(); } isEOF = agent(innerAg) { if (isEOF) throw new ParseException(getSourceRef(dir)+" The directive '{ begin "+dir+"}' does not end with '{ end }'."); Modified: trunk/src/jason/asSyntax/parser/as2j.java =================================================================== --- trunk/src/jason/asSyntax/parser/as2j.java 2009-04-28 19:24:45 UTC (rev 1492) +++ trunk/src/jason/asSyntax/parser/as2j.java 2009-05-03 11:01:49 UTC (rev 1493) @@ -35,7 +35,7 @@ return "["+s.getSrcFile()+":"+s.getBeginSrcLine()+"]"; } private String getSourceRef(DefaultTerm t) { - return getSourceRef( ((DefaultTerm)t).getSrcInfo()); + return getSourceRef( t.getSrcInfo()); } private String getSourceRef(Object t) { if (t instanceof DefaultTerm) @@ -251,7 +251,7 @@ jj_consume_token(TK_BEGIN); dir = pred(); jj_consume_token(28); - Agent innerAg = new Agent(); + Agent innerAg = new Agent(); innerAg.initAg(); isEOF = agent(innerAg); if (isEOF) {if (true) throw new ParseException(getSourceRef(dir)+" The directive '{ begin "+dir+"}' does not end with '{ end }'.");} Modified: trunk/src/jason/asSyntax/patterns/goal/DG.java =================================================================== --- trunk/src/jason/asSyntax/patterns/goal/DG.java 2009-04-28 19:24:45 UTC (rev 1492) +++ trunk/src/jason/asSyntax/patterns/goal/DG.java 2009-05-03 11:01:49 UTC (rev 1493) @@ -26,6 +26,7 @@ public Agent process(Pred directive, Agent outerContent, Agent innerContent) { try { Agent newAg = new Agent(); + newAg.initAg(); Literal goal = Literal.parseLiteral(directive.getTerm(0).toString()); Modified: trunk/src/jason/asSyntax/patterns/goal/EBDG.java =================================================================== --- trunk/src/jason/asSyntax/patterns/goal/EBDG.java 2009-04-28 19:24:45 UTC (rev 1492) +++ trunk/src/jason/asSyntax/patterns/goal/EBDG.java 2009-05-03 11:01:49 UTC (rev 1493) @@ -29,6 +29,7 @@ public Agent process(Pred directive, Agent outerContent, Agent innerContent) { try { Agent newAg = new Agent(); + newAg.initAg(); Literal goal = Literal.parseLiteral(directive.getTerm(0).toString()); Modified: trunk/src/jason/asSyntax/patterns/goal/SGA.java =================================================================== --- trunk/src/jason/asSyntax/patterns/goal/SGA.java 2009-04-28 19:24:45 UTC (rev 1492) +++ trunk/src/jason/asSyntax/patterns/goal/SGA.java 2009-05-03 11:01:49 UTC (rev 1493) @@ -29,6 +29,7 @@ Term goal = directive.getTerm(2); Agent newAg = new Agent(); + newAg.initAg(); // add t : not f__l(_) & c <- !f__g(g). newAg.getPL().add(ASSyntax.parsePlan(trigger+" : not f__l(_) & " +context +" <- !f__g("+goal+").")); Modified: trunk/src/jason/control/ExecutionControlGUI.java =================================================================== --- trunk/src/jason/control/ExecutionControlGUI.java 2009-04-28 19:24:45 UTC (rev 1492) +++ trunk/src/jason/control/ExecutionControlGUI.java 2009-05-03 11:01:49 UTC (rev 1493) @@ -224,8 +224,7 @@ jList = new JList(listModel); spList = new JPanel(new BorderLayout()); spList.add(BorderLayout.CENTER, new JScrollPane(jList)); - spList.setBorder(BorderFactory.createTitledBorder(BorderFactory - .createEtchedBorder(), "Agents", TitledBorder.LEFT, TitledBorder.TOP)); + spList.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Agents", TitledBorder.LEFT, TitledBorder.TOP)); jList.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { String ag = jList.getSelectedValue().toString(); Modified: trunk/src/test/ASParserTest.java =================================================================== --- trunk/src/test/ASParserTest.java 2009-04-28 19:24:45 UTC (rev 1492) +++ trunk/src/test/ASParserTest.java 2009-05-03 11:01:49 UTC (rev 1493) @@ -4,9 +4,7 @@ import static jason.asSyntax.ASSyntax.createLiteral; import static jason.asSyntax.ASSyntax.createNumber; import static jason.asSyntax.ASSyntax.createString; -import jason.architecture.AgArch; import jason.asSemantics.Agent; -import jason.asSemantics.TransitionSystem; import jason.asSemantics.Unifier; import jason.asSyntax.ASSyntax; import jason.asSyntax.ListTerm; @@ -23,7 +21,6 @@ import jason.asSyntax.PlanBody.BodyType; import jason.asSyntax.parser.ParseException; import jason.asSyntax.parser.as2j; -import jason.infra.centralised.CentralisedAgArch; import jason.mas2j.MAS2JProject; import jason.mas2j.parser.mas2j; @@ -43,10 +40,7 @@ public void testKQML() { Agent ag = new Agent(); - ag.setLogger(null); - AgArch arch = new AgArch(); - arch.setArchInfraTier(new CentralisedAgArch()); - ag.setTS(new TransitionSystem(ag, null, null, arch)); + ag.initAg(); assertTrue(ag.parseAS(new File("src/asl/kqmlPlans.asl"))); assertTrue(ag.parseAS(new File("examples/auction/ag1.asl"))); @@ -136,8 +130,9 @@ as2j parser = new as2j(new StringReader(source)); Agent a = new Agent(); + a.initAg(); parser.agent(a); - assertEquals(a.getPL().getPlans().size(), 7); + assertEquals(7, a.getPL().getPlans().size()); source = " { begin omc(at(X,Y), no_battery, no_beer) } \n"; source += " +!at(X,Y) : b(X) <- go(X,Y). "; @@ -145,6 +140,7 @@ source += " { end }"; parser = new as2j(new StringReader(source)); a = new Agent(); + a.initAg(); a.setASLSrc("test1"); parser.agent(a); assertTrue(a.getPL().getPlans().size() == 8); @@ -156,6 +152,7 @@ source += " { end }"; parser = new as2j(new StringReader(source)); a = new Agent(); + a.initAg(); parser.agent(a); //for (Plan p: a.getPL().getPlans()) { // System.out.println(p); @@ -167,11 +164,12 @@ source += " { end }"; parser = new as2j(new StringReader(source)); a = new Agent(); + a.initAg(); parser.agent(a); //for (Plan p: a.getPL().getPlans()) { // System.out.println(p); //} - assertTrue(a.getPL().getPlans().size() == 5); + assertEquals(5, a.getPL().getPlans().size()); } @@ -283,6 +281,8 @@ parseDir(f); } else if (f.getName().endsWith(MAS2JProject.AS_EXT)) { as2j parser = new as2j(new FileInputStream(f)); + //Agent ag = new Agent(); + //ag.init(); parser.agent((Agent)null); } else if (f.getName().endsWith(MAS2JProject.EXT)) { mas2j parser = new mas2j(new FileInputStream(f)); Modified: trunk/src/test/BeliefBaseTest.java =================================================================== --- trunk/src/test/BeliefBaseTest.java 2009-04-28 19:24:45 UTC (rev 1492) +++ trunk/src/test/BeliefBaseTest.java 2009-05-03 11:01:49 UTC (rev 1493) @@ -1,10 +1,8 @@ package test; import jason.RevisionFailedException; -import jason.architecture.AgArch; import jason.asSemantics.Agent; import jason.asSemantics.Intention; -import jason.asSemantics.TransitionSystem; import jason.asSemantics.Unifier; import jason.asSyntax.ASSyntax; import jason.asSyntax.Atom; @@ -22,7 +20,6 @@ import jason.bb.BeliefBase; import jason.bb.DefaultBeliefBase; import jason.bb.JDBCPersistentBB; -import jason.infra.centralised.CentralisedAgArch; import java.util.Iterator; import java.util.List; @@ -253,9 +250,7 @@ public void testRemWithUnnamedVar() { Agent ag = new Agent(); - AgArch arch = new AgArch(); - arch.setArchInfraTier(new CentralisedAgArch()); - ag.setTS(new TransitionSystem(ag, null, null, arch)); + ag.initAg(); ag.getBB().add(Literal.parseLiteral("pos(2,3)")); Unifier u = new Unifier(); @@ -271,9 +266,7 @@ @SuppressWarnings("unused") public void testLogCons() { Agent ag = new Agent(); - AgArch arch = new AgArch(); - arch.setArchInfraTier(new CentralisedAgArch()); - ag.setTS(new TransitionSystem(ag, null, null, arch)); + ag.initAg(); ag.getBB().add(Literal.parseLiteral("a(10)")); ag.getBB().add(Literal.parseLiteral("a(20)")); @@ -525,9 +518,7 @@ @SuppressWarnings("unchecked") public void testBelBRF() throws RevisionFailedException { Agent ag = new Agent(); - AgArch arch = new AgArch(); - arch.setArchInfraTier(new CentralisedAgArch()); - ag.setTS(new TransitionSystem(ag, null, null, arch)); + ag.initAg(); ag.getBB().add(Literal.parseLiteral("a(10)")); ag.getBB().add(Literal.parseLiteral("a(20)[a]")); @@ -598,6 +589,7 @@ public void testClone() { Agent ag = new Agent(); + ag.initAg(); ag.getBB().add(1,Literal.parseLiteral("a(10)")); ag.getBB().add(1,Literal.parseLiteral("a(20)[a]")); ag.getBB().add(1,Literal.parseLiteral("a(30)[a,b]")); @@ -605,7 +597,7 @@ ag.getBB().add(1,Literal.parseLiteral("c(y)")); ag.getBB().add(Literal.parseLiteral("c(20)")); BeliefBase c = (BeliefBase)ag.getBB().clone(); - assertEquals(ag.getBB().toString(), c.toString()); + assertEquals(ag.getBB().size(), c.size()); } @SuppressWarnings("unchecked") Modified: trunk/src/test/ExprTermTest.java =================================================================== --- trunk/src/test/ExprTermTest.java 2009-04-28 19:24:45 UTC (rev 1492) +++ trunk/src/test/ExprTermTest.java 2009-05-03 11:01:49 UTC (rev 1493) @@ -1,9 +1,7 @@ package test; import jason.JasonException; -import jason.architecture.AgArch; import jason.asSemantics.Agent; -import jason.asSemantics.TransitionSystem; import jason.asSemantics.Unifier; import jason.asSyntax.ASSyntax; import jason.asSyntax.ArithExpr; @@ -17,7 +15,6 @@ import jason.asSyntax.Term; import jason.asSyntax.VarTerm; import jason.asSyntax.parser.ParseException; -import jason.infra.centralised.CentralisedAgArch; import java.util.Collections; @@ -207,10 +204,7 @@ public void testCount() throws Exception { Agent ag = new Agent(); - ag.initDefaultFunctions(); - AgArch arch = new AgArch(); - arch.setArchInfraTier(new CentralisedAgArch()); - ag.setTS(new TransitionSystem(ag, null, null, arch)); + ag.initAg(); assertTrue(ag.getFunction(".count",1) != null); ag.getBB().add(Literal.parseLiteral("b(10)")); Modified: trunk/src/test/RuleTest.java =================================================================== --- trunk/src/test/RuleTest.java 2009-04-28 19:24:45 UTC (rev 1492) +++ trunk/src/test/RuleTest.java 2009-05-03 11:01:49 UTC (rev 1493) @@ -1,14 +1,11 @@ package test; -import jason.architecture.AgArch; import jason.asSemantics.Agent; -import jason.asSemantics.TransitionSystem; import jason.asSemantics.Unifier; import jason.asSyntax.Literal; import jason.asSyntax.LogExpr; import jason.asSyntax.Rule; import jason.asSyntax.VarTerm; -import jason.infra.centralised.CentralisedAgArch; import java.util.HashMap; import java.util.Iterator; @@ -25,9 +22,7 @@ public void testLogCons() { Agent ag = new Agent(); - AgArch arch = new AgArch(); - arch.setArchInfraTier(new CentralisedAgArch()); - ag.setTS(new TransitionSystem(ag, null, null, arch)); + ag.initAg(); ag.getBB().add(Literal.parseLiteral("a(10)")); ag.getBB().add(Literal.parseLiteral("a(20)")); @@ -79,9 +74,7 @@ public void testLogCons2() { Agent ag = new Agent(); - AgArch arch = new AgArch(); - arch.setArchInfraTier(new CentralisedAgArch()); - ag.setTS(new TransitionSystem(ag, null, null, arch)); + ag.initAg(); Rule r = new Rule(Literal.parseLiteral("r([],a(X),b(X,4))"), Literal.parseLiteral("true")); ag.getBB().add(r); @@ -98,9 +91,7 @@ public void testLogConsRec() { Agent ag = new Agent(); - AgArch arch = new AgArch(); - arch.setArchInfraTier(new CentralisedAgArch()); - ag.setTS(new TransitionSystem(ag, null, null, arch)); + ag.initAg(); // add // min([],M,M). Modified: trunk/src/test/StdLibTest.java =================================================================== --- trunk/src/test/StdLibTest.java 2009-04-28 19:24:45 UTC (rev 1492) +++ trunk/src/test/StdLibTest.java 2009-05-03 11:01:49 UTC (rev 1493) @@ -1,7 +1,6 @@ package test; import jason.RevisionFailedException; -import jason.architecture.AgArch; import jason.asSemantics.Agent; import jason.asSemantics.Circumstance; import jason.asSemantics.IntendedMeans; @@ -25,7 +24,6 @@ import jason.asSyntax.VarTerm; import jason.asSyntax.parser.ParseException; import jason.bb.BeliefBase; -import jason.infra.centralised.CentralisedAgArch; import jason.stdlib.add_annot; import jason.stdlib.add_nested_source; import jason.stdlib.add_plan; @@ -64,6 +62,7 @@ p5 = Plan.parse("+!g5 : true <- i."); ag = new Agent(); + ag.initAg(); ag.getPL().add(Plan.parse("-!g1 : true <- j.")); } @@ -112,10 +111,7 @@ public void testFindAll() throws RevisionFailedException, ParseException { Agent ag = new Agent(); - ag.setLogger(null); - AgArch arch = new AgArch(); - arch.setArchInfraTier(new CentralisedAgArch()); - ag.setTS(new TransitionSystem(ag, null, null, arch)); + ag.initAg(); Literal l1 = Literal.parseLiteral("a(10,x)"); assertFalse(l1.hasSource()); @@ -142,7 +138,7 @@ public void testGetRelevantPlansAndAddPlan() throws Exception { Agent ag = new Agent(); - ag.setLogger(null); + ag.initAg(); Plan pa = ASSyntax.parsePlan("@t1 +a : g(10) <- .print(\"ok 10\")."); ag.getPL().add(pa, null, false); assertTrue(pa != null); Modified: trunk/src/test/TSTest.java =================================================================== --- trunk/src/test/TSTest.java 2009-04-28 19:24:45 UTC (rev 1492) +++ trunk/src/test/TSTest.java 2009-05-03 11:01:49 UTC (rev 1493) @@ -33,11 +33,11 @@ public void testRelevant() throws ParseException, JasonException { Agent ag = new Agent(); - Circumstance c = new Circumstance(); + ag.initAg(); ag.getPL().add(ASSyntax.parsePlan("@t1 +a(X) : g(10) <- .print(\"ok 10\")."), new Structure("nosource"), false); ag.getPL().add((Plan)ASSyntax.parseTerm("{ @t2 +a(X) : true <- .print(\"ok 20\") }"), new Structure("nosource"), false); ag.getPL().add(ASSyntax.parsePlan("@t3 +b : true <- true."), new Structure("nosource"), false); - TransitionSystem ts = new TransitionSystem(ag, c, null, null); + TransitionSystem ts = ag.getTS(); Literal content = Literal.parseLiteral("~alliance"); content.addSource(new Structure("ag1")); Modified: trunk/src/test/VarTermTest.java =================================================================== --- trunk/src/test/VarTermTest.java 2009-04-28 19:24:45 UTC (rev 1492) +++ trunk/src/test/VarTermTest.java 2009-05-03 11:01:49 UTC (rev 1493) @@ -1,9 +1,7 @@ package test; import jason.RevisionFailedException; -import jason.architecture.AgArch; import jason.asSemantics.Agent; -import jason.asSemantics.TransitionSystem; import jason.asSemantics.Unifier; import jason.asSyntax.ASSyntax; import jason.asSyntax.ArithExpr; @@ -23,7 +21,6 @@ import jason.asSyntax.parser.SimpleCharStream; import jason.asSyntax.parser.Token; import jason.asSyntax.parser.as2jTokenManager; -import jason.infra.centralised.CentralisedAgArch; import java.io.StringReader; import java.util.ArrayList; @@ -335,9 +332,7 @@ public void testVarWithAnnotsInLogCons() throws RevisionFailedException, ParseException { Agent ag = new Agent(); - AgArch arch = new AgArch(); - arch.setArchInfraTier(new CentralisedAgArch()); - ag.setTS(new TransitionSystem(ag, null, null, arch)); + ag.initAg(); ag.addBel(Literal.parseLiteral("b1[b]")); ag.addBel(Literal.parseLiteral("b2[d]")); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jom...@us...> - 2009-06-24 14:15:15
|
Revision: 1497 http://jason.svn.sourceforge.net/jason/?rev=1497&view=rev Author: jomifred Date: 2009-06-24 14:15:14 +0000 (Wed, 24 Jun 2009) Log Message: ----------- increase the size of stack to run Jason projects Modified Paths: -------------- trunk/src/jason/asSyntax/ASSyntax.java trunk/src/jason/asSyntax/ListTermImpl.java trunk/src/templates/build-template.xml Modified: trunk/src/jason/asSyntax/ASSyntax.java =================================================================== --- trunk/src/jason/asSyntax/ASSyntax.java 2009-06-16 18:56:41 UTC (rev 1496) +++ trunk/src/jason/asSyntax/ASSyntax.java 2009-06-24 14:15:14 UTC (rev 1497) @@ -134,6 +134,13 @@ } + /** Creates a new rule with a head and a body */ + public static Rule createRule(Literal head, LogicalFormula body) { + return new Rule(head,body); + } + + + /** creates a new literal by parsing a string */ public static Literal parseLiteral(String sLiteral) throws ParseException { return new as2j(new StringReader(sLiteral)).literal(); @@ -182,4 +189,9 @@ public static LogicalFormula parseFormula(String sExpr) throws ParseException { return (LogicalFormula)new as2j(new StringReader(sExpr)).log_expr(); } + + /** creates a new rule by parsing a string */ + public static Rule parseRule(String sRule) throws ParseException { + return (Rule)new as2j(new StringReader(sRule)).belief(); + } } Modified: trunk/src/jason/asSyntax/ListTermImpl.java =================================================================== --- trunk/src/jason/asSyntax/ListTermImpl.java 2009-06-16 18:56:41 UTC (rev 1496) +++ trunk/src/jason/asSyntax/ListTermImpl.java 2009-06-24 14:15:14 UTC (rev 1497) @@ -259,12 +259,18 @@ /** get the last ListTerm of this List */ public ListTerm getLast() { + ListTerm r = this; + while (!r.isEnd() && r.getNext() != null) + r = r.getNext(); + return r; + /* recursive implementation if (isEnd()) { return this; } else if (next != null) { return getNext().getLast(); } return null; // !!! no last!!!! + */ } public ListTerm getPenultimate() { @@ -306,7 +312,6 @@ } } - /** * Adds a list in the end of this list. * This method do not clone <i>lt</i>. @@ -475,7 +480,7 @@ } } public boolean add(Term o) { - return append(o) != null; + return getLast().append(o) != null; } @SuppressWarnings("unchecked") Modified: trunk/src/templates/build-template.xml =================================================================== --- trunk/src/templates/build-template.xml 2009-06-16 18:56:41 UTC (rev 1496) +++ trunk/src/templates/build-template.xml 2009-06-24 14:15:14 UTC (rev 1497) @@ -90,7 +90,7 @@ failonerror="true" fork="yes" dir="${basedir}" > <classpath refid="project.classpath"/> <arg line="${mas2j.project.file} ${debug} <RUN-ARGS>"/> - <jvmarg line="-Xmx500M"/> + <jvmarg line="-Xmx500M -Xss8M"/> </java> <antcall target="user-end" /> </target> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jom...@us...> - 2009-08-04 12:16:11
|
Revision: 1504 http://jason.svn.sourceforge.net/jason/?rev=1504&view=rev Author: jomifred Date: 2009-08-04 12:15:54 +0000 (Tue, 04 Aug 2009) Log Message: ----------- simplify impl of askAll Modified Paths: -------------- trunk/src/asl/kqmlPlans.asl trunk/src/jason/asSemantics/TransitionSystem.java Modified: trunk/src/asl/kqmlPlans.asl =================================================================== --- trunk/src/asl/kqmlPlans.asl 2009-07-22 15:51:02 UTC (rev 1503) +++ trunk/src/asl/kqmlPlans.asl 2009-08-04 12:15:54 UTC (rev 1504) @@ -82,11 +82,6 @@ -!kqml_received(Sender, askOne, Content, MsgId) <- .send(Sender, untell, Content, MsgId). -@kqmlReceivedAskAll1 -+!kqml_received(Sender, askAll, Content, MsgId) - : not Content - <- .send(Sender, untell, Content, MsgId). - @kqmlReceivedAskAll2 +!kqml_received(Sender, askAll, Content, MsgId) <- .findall(Content, Content, List); Modified: trunk/src/jason/asSemantics/TransitionSystem.java =================================================================== --- trunk/src/jason/asSemantics/TransitionSystem.java 2009-07-22 15:51:02 UTC (rev 1503) +++ trunk/src/jason/asSemantics/TransitionSystem.java 2009-08-04 12:15:54 UTC (rev 1504) @@ -29,7 +29,6 @@ import jason.asSyntax.ASSyntax; import jason.asSyntax.Atom; import jason.asSyntax.InternalActionLiteral; -import jason.asSyntax.ListTermImpl; import jason.asSyntax.Literal; import jason.asSyntax.LiteralImpl; import jason.asSyntax.LogicalFormula; @@ -176,12 +175,8 @@ // if the answer was tell 3, unifies X=3 // if the answer was untell 3, unifies X=false Structure send = (Structure)intention.peek().removeCurrentStep(); - if (m.isUnTell()) { - if (send.getTerm(1).toString().equals("askOne")) { - content = Literal.LFalse; - } else { // the .send is askAll - content = new ListTermImpl(); // the answer is an empty list - } + if (m.isUnTell() && send.getTerm(1).toString().equals("askOne")) { + content = Literal.LFalse; } if (intention.peek().getUnif().unifies(send.getTerm(3), content)) { getC().addIntention(intention); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jom...@us...> - 2009-12-07 13:31:47
|
Revision: 1561 http://jason.svn.sourceforge.net/jason/?rev=1561&view=rev Author: jomifred Date: 2009-12-07 13:31:40 +0000 (Mon, 07 Dec 2009) Log Message: ----------- improve jason jade arch to read parameters from .mas2j Modified Paths: -------------- trunk/src/jason/asSemantics/TransitionSystem.java trunk/src/jason/asSyntax/PlanLibrary.java trunk/src/jason/infra/centralised/RunCentralisedMAS.java trunk/src/jason/infra/jade/JadeAgArch.java trunk/src/jason/infra/jade/RunJadeMAS.java trunk/src/test/PlanTest.java Modified: trunk/src/jason/asSemantics/TransitionSystem.java =================================================================== --- trunk/src/jason/asSemantics/TransitionSystem.java 2009-12-05 19:01:10 UTC (rev 1560) +++ trunk/src/jason/asSemantics/TransitionSystem.java 2009-12-07 13:31:40 UTC (rev 1561) @@ -310,7 +310,7 @@ // get all relevant plans for the selected event //Trigger te = (Trigger) conf.C.SE.trigger.clone(); List<Plan> candidateRPs = conf.ag.pl.getCandidatePlans(conf.C.SE.trigger); - if (candidateRPs != null && !candidateRPs.isEmpty()) { + if (candidateRPs != null) { for (Plan pl : candidateRPs) { Unifier relUn = pl.isRelevant(conf.C.SE.trigger); if (relUn != null) { // is relevant Modified: trunk/src/jason/asSyntax/PlanLibrary.java =================================================================== --- trunk/src/jason/asSyntax/PlanLibrary.java 2009-12-05 19:01:10 UTC (rev 1560) +++ trunk/src/jason/asSyntax/PlanLibrary.java 2009-12-07 13:31:40 UTC (rev 1561) @@ -273,16 +273,24 @@ /** remove the plan with label <i>pLabel</i> */ public Plan remove(String pLabel) { - Plan p = (Plan) planLabels.remove(pLabel); + Plan p = planLabels.remove(pLabel); // remove it from plans' list plans.remove(p); if (p.getTrigger().getLiteral().isVar()) { varPlans.remove(p); - // remove p from all entries - for (List<Plan> lp: relPlans.values()) + // remove p from all entries and + // clean empty entries + Iterator<PredicateIndicator> ipi = relPlans.keySet().iterator(); + while (ipi.hasNext()) { + PredicateIndicator pi = ipi.next(); + List<Plan> lp = relPlans.get(pi); lp.remove(p); + if (lp.isEmpty()) { + ipi.remove(); + } + } } else { List<Plan> codesList = relPlans.get(p.getTrigger().getPredicateIndicator()); codesList.remove(p); @@ -300,8 +308,7 @@ } public boolean hasCandidatePlan(Trigger te) { - List<Plan> l = getCandidatePlans(te); - return l != null && ! l.isEmpty(); + return getCandidatePlans(te) != null; } @@ -313,12 +320,14 @@ public List<Plan> getCandidatePlans(Trigger te) { List<Plan> l = relPlans.get(te.getPredicateIndicator()); if ((l == null || l.isEmpty()) && !varPlans.isEmpty()) { // no rel plan, try varPlan - l = new ArrayList<Plan>(); for (Plan p: varPlans) - if (p.getTrigger().sameType(te)) + if (p.getTrigger().sameType(te)) { + if (l == null) + l = new ArrayList<Plan>(); l.add(p); + } } - return l; + return l; // if no rel plan, have to return null instead of empty list } public static final Trigger TE_IDLE = new Trigger(TEOperator.add, TEType.achieve, new Atom("idle")); Modified: trunk/src/jason/infra/centralised/RunCentralisedMAS.java =================================================================== --- trunk/src/jason/infra/centralised/RunCentralisedMAS.java 2009-12-05 19:01:10 UTC (rev 1560) +++ trunk/src/jason/infra/centralised/RunCentralisedMAS.java 2009-12-07 13:31:40 UTC (rev 1561) @@ -154,8 +154,10 @@ project.setupDefault(); project.registerDirectives(); + // set the aslSrcPath in the include + ((Include)DirectiveProcessor.getDirective("include")).setSourcePath(project.getSourcePaths()); - runner.createAg(project, debug); + runner.createAgents(project, debug); runner.startAgs(); runner.startSyncMode(); @@ -327,7 +329,7 @@ return project; } - protected void createAg(MAS2JProject project, boolean debug) throws JasonException { + protected void createAgents(MAS2JProject project, boolean debug) throws JasonException { // create environment logger.fine("Creating environment " + project.getEnvClass()); env = new CentralisedEnvironment(project.getEnvClass(), this); @@ -338,10 +340,7 @@ Agent pag = null; project.fixAgentsSrc(urlPrefix); - - // set the aslSrcPath in the include - ((Include)DirectiveProcessor.getDirective("include")).setSourcePath(project.getSourcePaths()); - + // create the agents for (AgentParameters ap : project.getAgents()) { try { Modified: trunk/src/jason/infra/jade/JadeAgArch.java =================================================================== --- trunk/src/jason/infra/jade/JadeAgArch.java 2009-12-05 19:01:10 UTC (rev 1560) +++ trunk/src/jason/infra/jade/JadeAgArch.java 2009-12-07 13:31:40 UTC (rev 1561) @@ -18,12 +18,18 @@ import jason.asSyntax.Literal; import jason.asSyntax.StringTermImpl; import jason.asSyntax.Term; +import jason.asSyntax.directives.DirectiveProcessor; +import jason.asSyntax.directives.Include; import jason.infra.centralised.RunCentralisedMAS; import jason.mas2j.AgentParameters; import jason.mas2j.ClassParameters; +import jason.mas2j.MAS2JProject; +import jason.mas2j.parser.ParseException; import jason.runtime.RuntimeServicesInfraTier; -import jason.runtime.Settings; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; import java.io.Serializable; import java.util.HashMap; import java.util.List; @@ -72,118 +78,132 @@ logger.info("starting "+getLocalName()); try { - // default values for args - String asSource = null; - String archClassName = null; - String agClassName = null; - ClassParameters bbPars = null; - Settings stts = null; - - Object[] args = getArguments(); - if (args == null) { - logger.info("No AgentSpeak source informed!"); - return; + AgentParameters ap = parseParameters(); + if (ap != null) { + userAgArch = (AgArch) Class.forName(ap.archClass.getClassName()).newInstance(); + userAgArch.setArchInfraTier(this); + userAgArch.initAg(ap.agClass.getClassName(), ap.getBBClass(), ap.asSource.getAbsolutePath(), ap.getAsSetts(false, false)); + logger.setLevel(userAgArch.getTS().getSettings().logLevel()); + + registerAgInDF(); + + tsBehaviour = new JasonTSReasoner(); + addBehaviour(tsBehaviour); + + logger.fine("Created from source "+ap.asSource); } - if (args[0] instanceof AgentParameters) { - AgentParameters ap = (AgentParameters)args[0]; - asSource = ap.asSource.getAbsolutePath(); - archClassName = ap.archClass.getClassName(); - agClassName = ap.agClass.getClassName(); - bbPars = ap.getBBClass(); - stts = ap.getAsSetts((Boolean)args[1], (Boolean)args[2]); // TODO: develop a way to get debug and sync parameters + } catch (Exception e) { + logger.log(Level.SEVERE,"Error creating JADE architecture.",e); + } + } - } else { - // read arguments - // if [0] is mas2j // TODO this - // read all parameters form [1] (including aslSource and directives) - // create the agents indicated by [2] - // else - // [0] is the file with AS source for the agent - // arch <arch class> - // ag <agent class> - // bb < belief base class > - // option < options > + protected AgentParameters parseParameters() throws ParseException, IOException { - asSource = args[0].toString(); - - // default values for args - archClassName = AgArch.class.getName(); - agClassName = jason.asSemantics.Agent.class.getName(); - bbPars = new ClassParameters(jason.bb.DefaultBeliefBase.class.getName()); - stts = new Settings(); - - int i=1; - while (i < args.length) { - - if (args[i].toString().equals("arch")) { - i++; - archClassName = args[i].toString(); - } else if (args[i].toString().equals("ag")) { - i++; - agClassName = args[i].toString(); - } + Object[] args = getArguments(); + if (args == null || args.length == 0) { + logger.info("No AgentSpeak source informed!"); + return null; + } - // TODO: read custom BB and settings from arguments + // read arguments + // if [0] is an instance of AgentParameters + // read parameters from [0] + // else if [0] is j-project + // read all parameters form [1] (including aslSource and directives) + // create the agents indicated by [2] + // else + // [0] is the file with AS source for the agent + // arch <arch class> + // ag <agent class> + // bb < belief base class > + // option < options > + if (args[0] instanceof AgentParameters) { + return (AgentParameters)args[0]; + } else if (args[0].toString().equals("j-project")) { // load parameters from .mas2j + if (args.length != 3) { + logger.log(Level.SEVERE, "To start agents from .mas2j file, you have to provide as parameters: (j-project, <file.mas2j>, <nameofagent in mas2j>)"); + return null; + } + jason.mas2j.parser.mas2j parser = new jason.mas2j.parser.mas2j(new FileReader(args[1].toString())); + MAS2JProject project = parser.mas(); + project.setupDefault(); + + project.registerDirectives(); + ((Include)DirectiveProcessor.getDirective("include")).setSourcePath(project.getSourcePaths()); + + AgentParameters ap = project.getAg(args[2].toString()); + if (ap == null) + logger.log(Level.SEVERE, "There is no agent '"+args[2]+"' in project '"+args[1]+"'."); + if (ap.qty > 1) + logger.warning("Ignoring quantity of agents from mas2j, jade arch creates only ONE agent."); + return ap; + + } else { // load parameters from shell + AgentParameters ap = new AgentParameters(); + ap.setupDefault(); + ap.asSource = new File(args[0].toString()); + + int i=1; + while (i < args.length) { + if (args[i].toString().equals("arch")) { i++; - } + ap.archClass = new ClassParameters(args[i].toString()); + } else if (args[i].toString().equals("ag")) { + i++; + ap.agClass = new ClassParameters(args[i].toString()); + } + i++; } - - userAgArch = (AgArch) Class.forName(archClassName).newInstance(); - userAgArch.setArchInfraTier(this); - userAgArch.initAg(agClassName, bbPars, asSource, stts); - logger.setLevel(userAgArch.getTS().getSettings().logLevel()); + return ap; + } + } - // DF register - DFAgentDescription dfa = new DFAgentDescription(); - dfa.setName(getAID()); - ServiceDescription vc = new ServiceDescription(); - vc.setType("jason"); - vc.setName(dfName); - dfa.addServices(vc); - try { - DFService.register(this,dfa); - } catch (FIPAException e) { - logger.log(Level.SEVERE, "Error registering agent in DF", e); - } - - tsBehaviour = new CyclicBehaviour() { - TransitionSystem ts = userAgArch.getTS(); - public void action() { - if (ts.getSettings().isSync()) { - if (processExecutionControlOntologyMsg()) { - // execute a cycle in sync mode - ts.reasoningCycle(); - boolean isBreakPoint = false; - try { - isBreakPoint = ts.getC().getSelectedOption().getPlan().hasBreakpoint(); - if (logger.isLoggable(Level.FINE)) logger.fine("Informing controller that I finished a reasoning cycle "+userAgArch.getCycleNumber()+". Breakpoint is " + isBreakPoint); - } catch (NullPointerException e) { - // no problem, there is no sel opt, no plan .... - } - informCycleFinished(isBreakPoint, userAgArch.getCycleNumber()); + private void registerAgInDF() { + // DF register + DFAgentDescription dfa = new DFAgentDescription(); + dfa.setName(getAID()); + ServiceDescription vc = new ServiceDescription(); + vc.setType("jason"); + vc.setName(dfName); + dfa.addServices(vc); + try { + DFService.register(this,dfa); + } catch (FIPAException e) { + logger.log(Level.SEVERE, "Error registering agent in DF", e); + } + } - } else { - block(1000); - } - } else { - if (enterInSleepMode) { - block(1000); - enterInSleepMode = false; - } else { - ts.reasoningCycle(); - } + class JasonTSReasoner extends CyclicBehaviour { + TransitionSystem ts = userAgArch.getTS(); + public void action() { + if (ts.getSettings().isSync()) { + if (processExecutionControlOntologyMsg()) { + // execute a cycle in sync mode + ts.reasoningCycle(); + boolean isBreakPoint = false; + try { + isBreakPoint = ts.getC().getSelectedOption().getPlan().hasBreakpoint(); + if (logger.isLoggable(Level.FINE)) logger.fine("Informing controller that I finished a reasoning cycle "+userAgArch.getCycleNumber()+". Breakpoint is " + isBreakPoint); + } catch (NullPointerException e) { + // no problem, there is no sel opt, no plan .... } + informCycleFinished(isBreakPoint, userAgArch.getCycleNumber()); + + } else { + block(1000); } - }; - addBehaviour(tsBehaviour); - - logger.fine("Created from source "+asSource); - } catch (Exception e) { - logger.log(Level.SEVERE,"Error creating JADE architecture.",e); + } else { + if (enterInSleepMode) { + block(1000); + enterInSleepMode = false; + } else { + ts.reasoningCycle(); + } + } } } - + @Override public void doDelete() { try { Modified: trunk/src/jason/infra/jade/RunJadeMAS.java =================================================================== --- trunk/src/jason/infra/jade/RunJadeMAS.java 2009-12-05 19:01:10 UTC (rev 1560) +++ trunk/src/jason/infra/jade/RunJadeMAS.java 2009-12-07 13:31:40 UTC (rev 1561) @@ -126,7 +126,7 @@ } @Override - protected void createAg(MAS2JProject project, boolean debug) throws JasonException { + protected void createAgents(MAS2JProject project, boolean debug) throws JasonException { if (!startContainer()) return; try { // create environment Modified: trunk/src/test/PlanTest.java =================================================================== --- trunk/src/test/PlanTest.java 2009-12-05 19:01:10 UTC (rev 1560) +++ trunk/src/test/PlanTest.java 2009-12-07 13:31:40 UTC (rev 1561) @@ -53,7 +53,7 @@ assertEquals(1, pls.size()); pls = pl.getCandidatePlans(ASSyntax.parseTrigger("+bla")); - assertEquals(0, pls.size()); + assertNull(pls); } public void testParser1() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jom...@us...> - 2010-02-08 11:48:15
|
Revision: 1578 http://jason.svn.sourceforge.net/jason/?rev=1578&view=rev Author: jomifred Date: 2010-02-08 11:48:07 +0000 (Mon, 08 Feb 2010) Log Message: ----------- improve equals in ObjectTermImpl as proposed by Tim Cleaver Modified Paths: -------------- trunk/src/jason/asSyntax/ObjectTermImpl.java trunk/src/test/TermTest.java Modified: trunk/src/jason/asSyntax/ObjectTermImpl.java =================================================================== --- trunk/src/jason/asSyntax/ObjectTermImpl.java 2010-02-05 17:36:33 UTC (rev 1577) +++ trunk/src/jason/asSyntax/ObjectTermImpl.java 2010-02-08 11:48:07 UTC (rev 1578) @@ -30,8 +30,18 @@ public boolean equals(Object o) { if (this.o == null) return false; if (o == null) return false; - if (!(o instanceof ObjectTermImpl)) return false; - return this.o.equals(((ObjectTermImpl) o).o); + + if (o instanceof ObjectTermImpl) { + return this.o.equals(((ObjectTermImpl) o).o); + } + + if (o instanceof VarTerm) { + Term value = ((VarTerm) o).getValue(); + if (value instanceof ObjectTermImpl) { + return this.o.equals(((ObjectTermImpl) value).o); + } + } + return false; } @Override Modified: trunk/src/test/TermTest.java =================================================================== --- trunk/src/test/TermTest.java 2010-02-05 17:36:33 UTC (rev 1577) +++ trunk/src/test/TermTest.java 2010-02-08 11:48:07 UTC (rev 1578) @@ -943,4 +943,13 @@ assertFalse(iterator.hasNext()); } + + public void testVarObTerm() { + ObjectTerm term = new ObjectTermImpl("test"); + VarTerm variable = new VarTerm("Variable"); + variable.setValue(term); + assertTrue(term.equals(variable)); + assertTrue(variable.equals(term)); + assertTrue(variable.equals(new ObjectTermImpl("test"))); + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jom...@us...> - 2010-06-28 12:30:06
|
Revision: 1601 http://jason.svn.sourceforge.net/jason/?rev=1601&view=rev Author: jomifred Date: 2010-06-28 12:29:59 +0000 (Mon, 28 Jun 2010) Log Message: ----------- fix bug related to makVarAnnon when a var is ground with a list Modified Paths: -------------- trunk/src/jason/asSyntax/VarTerm.java trunk/src/jason/stdlib/findall.java trunk/src/test/ListTermTest.java Modified: trunk/src/jason/asSyntax/VarTerm.java =================================================================== --- trunk/src/jason/asSyntax/VarTerm.java 2010-06-03 19:03:22 UTC (rev 1600) +++ trunk/src/jason/asSyntax/VarTerm.java 2010-06-28 12:29:59 UTC (rev 1601) @@ -420,7 +420,7 @@ public Literal makeVarsAnnon(Unifier un) { if (value == null) return super.makeVarsAnnon(un); - else if (getValue().isLiteral()) + else if (getValue().isLiteral() || getValue().isList()) return ((Literal)getValue()).makeVarsAnnon(un); else return null; Modified: trunk/src/jason/stdlib/findall.java =================================================================== --- trunk/src/jason/stdlib/findall.java 2010-06-03 19:03:22 UTC (rev 1600) +++ trunk/src/jason/stdlib/findall.java 2010-06-28 12:29:59 UTC (rev 1601) @@ -96,7 +96,6 @@ Term var = args[0]; LogicalFormula logExpr = (LogicalFormula)args[1]; - ListTerm all = new ListTermImpl(); ListTerm tail = all; Iterator<Unifier> iu = logExpr.logicalConsequence(ts.getAg(), un); Modified: trunk/src/test/ListTermTest.java =================================================================== --- trunk/src/test/ListTermTest.java 2010-06-03 19:03:22 UTC (rev 1600) +++ trunk/src/test/ListTermTest.java 2010-06-28 12:29:59 UTC (rev 1601) @@ -337,6 +337,21 @@ assertEquals("[[a, b, c, 8]]", iterator2list(l3.subSets(4)).toString()); } + public void testMkVarAn() { + ListTermImpl l = (ListTermImpl)ListTermImpl.parseList("[use(car,Agent)]"); + l.makeVarsAnnon(); + assertTrue(l.toString().indexOf("_") > 0); + + l = (ListTermImpl)ListTermImpl.parseList("[use(car,Agent)]"); + + VarTerm v = new VarTerm("V"); + Unifier u = new Unifier(); + u.unifies(v, l); + v.apply(u); + v.makeVarsAnnon(); + assertTrue(v.toString().indexOf("_") > 0); + } + @SuppressWarnings("unchecked") List iterator2list(Iterator i) { List l = new ArrayList(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jom...@us...> - 2010-08-10 13:48:51
|
Revision: 1606 http://jason.svn.sourceforge.net/jason/?rev=1606&view=rev Author: jomifred Date: 2010-08-10 13:48:45 +0000 (Tue, 10 Aug 2010) Log Message: ----------- improve atomic status computation for intentions Modified Paths: -------------- trunk/src/jason/asSemantics/Intention.java trunk/src/test/TSTest.java Modified: trunk/src/jason/asSemantics/Intention.java =================================================================== --- trunk/src/jason/asSemantics/Intention.java 2010-08-03 20:12:59 UTC (rev 1605) +++ trunk/src/jason/asSemantics/Intention.java 2010-08-10 13:48:45 UTC (rev 1606) @@ -52,12 +52,12 @@ private static int idCount = 0; private int id; - private boolean isAtomic = false; + private int atomicCount = 0; // how many atomic intended means there are in the intention private boolean isSuspended = false; private Stack<IntendedMeans> intendedMeans = new Stack<IntendedMeans>(); - // static private Logger logger = Logger.getLogger(Intention.class.getName()); + //static private Logger logger = Logger.getLogger(Intention.class.getName()); public Intention() { id = ++idCount; @@ -69,9 +69,8 @@ public void push(IntendedMeans im) { intendedMeans.push(im); - if (im.isAtomic()) { - isAtomic = true; - } + if (im.isAtomic()) + atomicCount++; } public IntendedMeans peek() { @@ -85,16 +84,27 @@ public IntendedMeans pop() { IntendedMeans top = intendedMeans.pop(); - isAtomic = false; - for (IntendedMeans im : intendedMeans) { - if (im.isAtomic()) { - isAtomic = true; - break; - } + if (isAtomic() && top.isAtomic()) { + atomicCount--; + /* for (IntendedMeans im : intendedMeans) { + if (im.isAtomic()) { + isAtomic = true; + break; + } + }*/ } return top; } + public boolean isAtomic() { + return atomicCount > 0; + } + + public void setAtomic(int a) { // used for test + atomicCount = a; + } + + public ListIterator<IntendedMeans> iterator() { return intendedMeans.listIterator(intendedMeans.size()); } @@ -107,14 +117,6 @@ return intendedMeans.size(); } - public boolean isAtomic() { - return isAtomic; - } - - public void setAtomic(boolean b) { - isAtomic = b; - } - public void setSuspended(boolean b) { isSuspended = b; } @@ -161,8 +163,10 @@ /** implements atomic intentions > not atomic intentions */ public int compareTo(Intention o) { - if (o.isAtomic && !this.isAtomic) return 1; - if (this.isAtomic && !o.isAtomic) return -1; + //if (o.isAtomic() && !this.isAtomic()) return 1; + //if (this.isAtomic() && !o.isAtomic()) return -1; + if (o.atomicCount > this.atomicCount) return 1; + if (this.atomicCount > o.atomicCount) return -1; return 0; } @@ -180,7 +184,7 @@ public Intention clone() { Intention i = new Intention(); i.id = id; - i.isAtomic = isAtomic; + i.atomicCount = atomicCount; i.intendedMeans = new Stack<IntendedMeans>(); for (IntendedMeans im: intendedMeans) { i.intendedMeans.add((IntendedMeans)im.clone()); Modified: trunk/src/test/TSTest.java =================================================================== --- trunk/src/test/TSTest.java 2010-08-03 20:12:59 UTC (rev 1605) +++ trunk/src/test/TSTest.java 2010-08-10 13:48:45 UTC (rev 1606) @@ -83,7 +83,7 @@ Intention i2 = new Intention(); Intention i3 = new Intention(); - i3.setAtomic(true); + i3.setAtomic(1); assertTrue(i3.isAtomic()); Intention i4 = new Intention(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jom...@us...> - 2010-08-10 21:46:11
|
Revision: 1607 http://jason.svn.sourceforge.net/jason/?rev=1607&view=rev Author: jomifred Date: 2010-08-10 21:46:04 +0000 (Tue, 10 Aug 2010) Log Message: ----------- fix a bug on annotation backtrack (do not backtrack when a tail is used, as in p[A|R]) Modified Paths: -------------- trunk/src/jason/asSyntax/ListTermImpl.java trunk/src/jason/asSyntax/Literal.java trunk/src/test/TermTest.java Modified: trunk/src/jason/asSyntax/ListTermImpl.java =================================================================== --- trunk/src/jason/asSyntax/ListTermImpl.java 2010-08-10 13:48:45 UTC (rev 1606) +++ trunk/src/jason/asSyntax/ListTermImpl.java 2010-08-10 21:46:04 UTC (rev 1607) @@ -585,6 +585,8 @@ break; } l = l.getNext(); + if (l == null) + break; if (!l.isEmpty()) s.append(','); } Modified: trunk/src/jason/asSyntax/Literal.java =================================================================== --- trunk/src/jason/asSyntax/Literal.java 2010-08-10 13:48:45 UTC (rev 1606) +++ trunk/src/jason/asSyntax/Literal.java 2010-08-10 21:46:04 UTC (rev 1607) @@ -260,7 +260,7 @@ return LogExpr.EMPTY_UNIF_LIST.iterator(); final AgArch arch = (ag == null ? null : ag.getTS().getUserAgArch()); - final int nbAnnots = (hasAnnot() ? getAnnots().size() : 0); + final int nbAnnots = (hasAnnot() && getAnnots().getTail() == null ? getAnnots().size() : 0); // if annots contains a tail (as in p[A|R]), do not backtrack on annots return new Iterator<Unifier>() { Unifier current = null; Modified: trunk/src/test/TermTest.java =================================================================== --- trunk/src/test/TermTest.java 2010-08-10 13:48:45 UTC (rev 1606) +++ trunk/src/test/TermTest.java 2010-08-10 21:46:04 UTC (rev 1607) @@ -490,18 +490,24 @@ u = new Unifier(); assertTrue(p1.hasSubsetAnnot(p5, u)); - Pred p6 = Pred.parsePred("p1(t1,t2)[a1|T]"); - - //r.clear(); - //assertTrue(p6.getSubsetAnnots(p1.getAnnots(),new Unifier(),r)); - //System.out.println("p6="+p6+"; p1="+p1+" r="+r); - //assertEquals(r.get(0).get("T").toString(), "[a(2,3),a(3)]"); - + Pred p6 = Pred.parsePred("p1(t1,t2)[a(3)|T]"); u = new Unifier(); assertTrue(p6.hasSubsetAnnot(p1, u)); - assertEquals(u.get("T").toString(), "[a(3),a(2,3)]"); + assertEquals(u.get("T").toString(), "[a1,a(2,3)]"); assertTrue(p1.hasSubsetAnnot(p6, u)); + Pred p7 = Pred.parsePred("p1(t1,t2)[A|T]"); + u = new Unifier(); + assertTrue(p7.hasSubsetAnnot(p1, u)); + assertEquals("a1", u.get("A").toString() ); + assertEquals("[a(3),a(2,3)]", u.get("T").toString()); + assertTrue(p1.hasSubsetAnnot(p7, u)); + + u = new Unifier(); + assertTrue(p1.hasSubsetAnnot(p7, u)); + assertEquals("a1", u.get("A").toString() ); + assertEquals("[a(3),a(2,3)]", u.get("T").toString()); + // test many vars l1 = Literal.parseLiteral( "p[4,W,a,b,X,Y,e,Z]"); assertTrue( Literal.parseLiteral("p[4]").hasSubsetAnnot(l1)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jom...@us...> - 2011-04-13 19:52:10
|
Revision: 1641 http://jason.svn.sourceforge.net/jason/?rev=1641&view=rev Author: jomifred Date: 2011-04-13 19:52:04 +0000 (Wed, 13 Apr 2011) Log Message: ----------- test whether a TS is set for Agent in LogCons Modified Paths: -------------- trunk/src/jason/asSemantics/Agent.java trunk/src/jason/asSyntax/InternalActionLiteral.java trunk/src/jason/asSyntax/Literal.java trunk/src/test/TSTest.java Modified: trunk/src/jason/asSemantics/Agent.java =================================================================== --- trunk/src/jason/asSemantics/Agent.java 2011-04-12 18:47:14 UTC (rev 1640) +++ trunk/src/jason/asSemantics/Agent.java 2011-04-13 19:52:04 UTC (rev 1641) @@ -247,7 +247,7 @@ private void fixAgInIAandFunctions(Agent a, Literal l) throws Exception { // if l is internal action/function if (l instanceof InternalActionLiteral) { - ((InternalActionLiteral)l).setIA(null); + ((InternalActionLiteral)l).setIA(null); // reset the IA in the literal, the IA there will be updated next getIA call } if (l instanceof ArithFunctionTerm) { ((ArithFunctionTerm)l).setAgent(a); Modified: trunk/src/jason/asSyntax/InternalActionLiteral.java =================================================================== --- trunk/src/jason/asSyntax/InternalActionLiteral.java 2011-04-12 18:47:14 UTC (rev 1640) +++ trunk/src/jason/asSyntax/InternalActionLiteral.java 2011-04-13 19:52:04 UTC (rev 1641) @@ -37,7 +37,7 @@ /** - A particular type of literal used to represent internal actions (has a "." in the functor). + A particular type of literal used to represent internal actions (which has a "." in the functor). @navassoc - ia - InternalAction @@ -47,7 +47,7 @@ private static final long serialVersionUID = 1L; private static Logger logger = Logger.getLogger(InternalActionLiteral.class.getName()); - private InternalAction ia = null; // reference to the object that implements the internal action + private InternalAction ia = null; // reference to the object that implements the internal action, stored here to speed up the process of looking for the IA class inside the agent public InternalActionLiteral(String functor) { super(functor); Modified: trunk/src/jason/asSyntax/Literal.java =================================================================== --- trunk/src/jason/asSyntax/Literal.java 2011-04-12 18:47:14 UTC (rev 1640) +++ trunk/src/jason/asSyntax/Literal.java 2011-04-13 19:52:04 UTC (rev 1641) @@ -259,7 +259,7 @@ if (il == null) // no relevant bels return LogExpr.EMPTY_UNIF_LIST.iterator(); - final AgArch arch = (ag == null ? null : ag.getTS().getUserAgArch()); + final AgArch arch = (ag != null && ag.getTS() != null ? ag.getTS().getUserAgArch() : null); final int nbAnnots = (hasAnnot() && getAnnots().getTail() == null ? getAnnots().size() : 0); // if annots contains a tail (as in p[A|R]), do not backtrack on annots return new Iterator<Unifier>() { Modified: trunk/src/test/TSTest.java =================================================================== --- trunk/src/test/TSTest.java 2011-04-12 18:47:14 UTC (rev 1640) +++ trunk/src/test/TSTest.java 2011-04-13 19:52:04 UTC (rev 1641) @@ -127,21 +127,19 @@ public void testAgentClone() throws Exception { Agent a = new Agent(); - new TransitionSystem(a, new Circumstance(), new Settings(), new AgArch()); // just to have a default value for ts - //a.parseAS(new File()); a.initAg("examples/auction/ag3.asl"); String p1 = a.getPL().toString(); String b1 = a.getBB().toString(); - InternalAction ia1 = ((InternalActionLiteral)a.getPL().get("prop_alliance").getBody().getBodyTerm()).getIA(null); + InternalAction ia1 = ((InternalActionLiteral)a.getPL().get("prop_alliance").getBody().getBodyTerm()).getIA(a); assertTrue(ia1 != null); // get the arith expr (B+C) from the plan Structure send1 = (Structure)a.getPL().get("palliance").getBody().getBodyNext().getBodyNext().getBodyTerm(); ArithFunctionTerm add1 = (ArithFunctionTerm)((Structure)send1.getTerm(2)).getTerm(1); assertEquals("(B+C)", add1.toString()); - // the agent is null here because it is a arith expr - assertEquals(null, add1.getAgent()); + // the agent is null here because it is an arith expr + //assertEquals(null, add1.getAgent()); a = a.clone(new AgArch()); assertEquals(p1, a.getPL().toString()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jom...@us...> - 2011-06-09 20:19:29
|
Revision: 1648 http://jason.svn.sourceforge.net/jason/?rev=1648&view=rev Author: jomifred Date: 2011-06-09 20:19:22 +0000 (Thu, 09 Jun 2011) Log Message: ----------- include PE (pending events) in C also consider this new structure in the concerned internal actions (suspend, resumo, drop*, ...) Modified Paths: -------------- trunk/src/jason/asSemantics/Circumstance.java trunk/src/jason/stdlib/drop_all_desires.java trunk/src/jason/stdlib/drop_all_events.java trunk/src/jason/stdlib/drop_all_intentions.java trunk/src/jason/stdlib/drop_desire.java trunk/src/jason/stdlib/drop_intention.java trunk/src/jason/stdlib/intend.java trunk/src/jason/stdlib/resume.java trunk/src/jason/stdlib/succeed_goal.java trunk/src/jason/stdlib/suspend.java trunk/src/xml/agInspection.xsl Modified: trunk/src/jason/asSemantics/Circumstance.java =================================================================== --- trunk/src/jason/asSemantics/Circumstance.java 2011-06-09 18:24:37 UTC (rev 1647) +++ trunk/src/jason/asSemantics/Circumstance.java 2011-06-09 20:19:22 UTC (rev 1648) @@ -64,6 +64,7 @@ private List<ActionExec> FA; // Feedback actions, those that are already executed private Map<String, Intention> PI; // pending intentions, intentions suspended by any other reason + private Map<String, Event> PE; // pending events, events suspended by .suspend private List<CircumstanceListener> listeners = new CopyOnWriteArrayList<CircumstanceListener>(); @@ -80,6 +81,7 @@ MB = new LinkedList<Message>(); PA = new ConcurrentHashMap<Integer, ActionExec>(); PI = new ConcurrentHashMap<String, Intention>(); + PE = new ConcurrentHashMap<String, Event>(); FA = new ArrayList<ActionExec>(); } @@ -352,6 +354,41 @@ return false; } + /** pending events */ + + public Map<String, Event> getPendingEvents() { + return PE; + } + + public boolean hasPendingEvent() { + return PE != null && PE.size() > 0; + } + + public void clearPendingEvents() { + // notify listeners + if (listeners != null) + for (CircumstanceListener el : listeners) + for (Event e: PE.values()) + if (e.getIntention() != null) + el.intentionDropped(e.getIntention()); + + PE.clear(); + } + + public void addPendingEvent(String id, Event e) { + PE.put(id, e); + + if (listeners != null && e.getIntention() != null) + for (CircumstanceListener el : listeners) + el.intentionSuspended(e.getIntention(), id); + } + + public Event removePendingEvent(String pendingId) { + return PE.remove(pendingId); + } + + /** actions */ + public ActionExec getAction() { return A; } @@ -500,6 +537,9 @@ for (String k: this.PI.keySet()) { c.PI.put(k, (Intention)PI.get(k).clone()); } + for (String k: this.PE.keySet()) { + c.PE.put(k, (Event)PE.get(k).clone()); + } for (ActionExec ae: FA) { c.FA.add((ActionExec)ae.clone()); } @@ -508,19 +548,16 @@ /** get the agent circumstance as XML */ - @SuppressWarnings("unchecked") public Element getAsDOM(Document document) { Element c = (Element) document.createElement("circumstance"); Element e; - Iterator i; // MB if (getMailBox() != null && !getMailBox().isEmpty()) { Element ms = (Element) document.createElement("mailbox"); - i = getMailBox().iterator(); - while (i.hasNext()) { + for (Message m: getMailBox()) { e = (Element) document.createElement("message"); - e.appendChild(document.createTextNode(i.next().toString())); + e.appendChild(document.createTextNode(m.toString())); ms.appendChild(e); } c.appendChild(ms); @@ -530,10 +567,8 @@ Element events = (Element) document.createElement("events"); boolean add = false; if (E != null && !E.isEmpty()) { - i = E.iterator(); - while (i.hasNext()) { + for (Event evt: E) { add = true; - Event evt = (Event) i.next(); e = evt.getAsDOM(document); events.appendChild(e); } @@ -544,6 +579,14 @@ e.setAttribute("selected", "true"); events.appendChild(e); } + if (hasPendingEvent()) { + for (String k: PE.keySet()) { + add = true; + e = PE.get(k).getAsDOM(document); + e.setAttribute("pending", k); + events.appendChild(e); + } + } if (add) { c.appendChild(events); } @@ -576,9 +619,7 @@ } if (getRelevantPlans() != null && !getRelevantPlans().isEmpty()) { - i = getRelevantPlans().iterator(); - while (i.hasNext()) { - Option o = (Option) i.next(); + for (Option o: getRelevantPlans()) { if (!alreadyIn.contains(o)) { alreadyIn.add(o); e = o.getAsDOM(document); @@ -631,7 +672,7 @@ } Element acts = (Element) document.createElement("actions"); - alreadyIn = new ArrayList(); + alreadyIn = new ArrayList<Object>(); // action if (getAction() != null) { @@ -664,9 +705,7 @@ // FA if (hasFeedbackAction()) { - i = getFeedbackActions().iterator(); - while (i.hasNext()) { - ActionExec o = (ActionExec) i.next(); + for (ActionExec o: getFeedbackActions()) { if (!alreadyIn.contains(o)) { alreadyIn.add(o); e = o.getAsDOM(document); Modified: trunk/src/jason/stdlib/drop_all_desires.java =================================================================== --- trunk/src/jason/stdlib/drop_all_desires.java 2011-06-09 18:24:37 UTC (rev 1647) +++ trunk/src/jason/stdlib/drop_all_desires.java 2011-06-09 20:19:22 UTC (rev 1648) @@ -65,6 +65,7 @@ public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { super.execute(ts, un, args); ts.getC().clearEvents(); + ts.getC().clearPendingEvents(); return true; } } Modified: trunk/src/jason/stdlib/drop_all_events.java =================================================================== --- trunk/src/jason/stdlib/drop_all_events.java 2011-06-09 18:24:37 UTC (rev 1647) +++ trunk/src/jason/stdlib/drop_all_events.java 2011-06-09 20:19:22 UTC (rev 1648) @@ -72,6 +72,7 @@ public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { checkArguments(args); ts.getC().clearEvents(); + ts.getC().clearPendingEvents(); return true; } } Modified: trunk/src/jason/stdlib/drop_all_intentions.java =================================================================== --- trunk/src/jason/stdlib/drop_all_intentions.java 2011-06-09 18:24:37 UTC (rev 1647) +++ trunk/src/jason/stdlib/drop_all_intentions.java 2011-06-09 20:19:22 UTC (rev 1648) @@ -27,7 +27,6 @@ import jason.asSemantics.Circumstance; import jason.asSemantics.DefaultInternalAction; import jason.asSemantics.Event; -import jason.asSemantics.Intention; import jason.asSemantics.TransitionSystem; import jason.asSemantics.Unifier; import jason.asSyntax.Term; @@ -81,12 +80,19 @@ // drop intentions in E for (Event e: C.getEvents()) { - // it is not an external event - if (e.getIntention() != Intention.EmptyInt) { + if (e.isInternal()) { C.removeEvent(e); } } + // drop intentions in PE + for (String ek: C.getPendingEvents().keySet()) { + Event e = C.getPendingEvents().get(ek); + if (e.isInternal()) { + C.removePendingEvent(ek); + } + } + // cancel future events generated by .at at atia = (at)ts.getAg().getIA(at.atAtom); atia.cancelAts(); Modified: trunk/src/jason/stdlib/drop_desire.java =================================================================== --- trunk/src/jason/stdlib/drop_desire.java 2011-06-09 18:24:37 UTC (rev 1647) +++ trunk/src/jason/stdlib/drop_desire.java 2011-06-09 20:19:22 UTC (rev 1648) @@ -83,17 +83,25 @@ public void dropEvt(Circumstance C, Literal l, Unifier un) { Trigger te = new Trigger(TEOperator.add, TEType.achieve, l); - Iterator<Event> ie = C.getEvents().iterator(); + + // search in E + dropEvt(te, un, C.getEvents().iterator()); + + // search in PE (only the event need to be checked, the related intention is handeled by dropInt) + dropEvt(te, un, C.getPendingEvents().values().iterator()); + } + + private static void dropEvt(Trigger te, Unifier un, Iterator<Event> ie) { while (ie.hasNext()) { Event ei = ie.next(); Trigger t = ei.getTrigger(); if (ei.getIntention() != Intention.EmptyInt) { // since the unifier of the intention will not be used, apply it to the event before comparing to the event to be dropped - t = (Trigger) t.clone(); + t = t.clone(); t.apply(ei.getIntention().peek().getUnif()); } if (un.clone().unifiesNoUndo(te, t)) { ie.remove(); } } - } + } } Modified: trunk/src/jason/stdlib/drop_intention.java =================================================================== --- trunk/src/jason/stdlib/drop_intention.java 2011-06-09 18:24:37 UTC (rev 1647) +++ trunk/src/jason/stdlib/drop_intention.java 2011-06-09 20:19:22 UTC (rev 1648) @@ -90,7 +90,7 @@ Trigger g = new Trigger(TEOperator.add, TEType.achieve, l); - // intention may be suspended in E + // intention may be suspended in E or PE for (Event e: C.getEvents()) { Intention i = e.getIntention(); if (i != null && i.hasTrigger(g, un)) { @@ -98,6 +98,13 @@ un = bak.clone(); } } + for (String k: C.getPendingEvents().keySet()) { + Intention i = C.getPendingEvents().get(k).getIntention(); + if (i != null && i.hasTrigger(g, un)) { + C.removePendingEvent(k); + un = bak.clone(); + } + } // intention may be suspended in PA! (in the new semantics) for (ActionExec a: C.getPendingActions().values()) { Modified: trunk/src/jason/stdlib/intend.java =================================================================== --- trunk/src/jason/stdlib/intend.java 2011-06-09 18:24:37 UTC (rev 1647) +++ trunk/src/jason/stdlib/intend.java 2011-06-09 20:19:22 UTC (rev 1648) @@ -104,11 +104,17 @@ return true; } - // intention may be suspended in E + // intention may be in E for (Event evt : C.getEvents()) { if (evt.getIntention() != null && evt.getIntention().hasTrigger(g, un)) return true; } + + // intention may be suspended in PE + for (Event evt : C.getPendingEvents().values()) { + if (evt.getIntention() != null && evt.getIntention().hasTrigger(g, un)) + return true; + } // intention may be suspended in PA! (in the new semantics) if (C.hasPendingAction()) { Modified: trunk/src/jason/stdlib/resume.java =================================================================== --- trunk/src/jason/stdlib/resume.java 2011-06-09 18:24:37 UTC (rev 1647) +++ trunk/src/jason/stdlib/resume.java 2011-06-09 20:19:22 UTC (rev 1648) @@ -26,6 +26,7 @@ import jason.JasonException; import jason.asSemantics.Circumstance; import jason.asSemantics.DefaultInternalAction; +import jason.asSemantics.Event; import jason.asSemantics.Intention; import jason.asSemantics.TransitionSystem; import jason.asSemantics.Unifier; @@ -81,6 +82,7 @@ Trigger g = new Trigger(TEOperator.add, TEType.achieve, (Literal)args[0]); Circumstance C = ts.getC(); + // Search the goal in PI Iterator<String> ik = C.getPendingIntentions().keySet().iterator(); while (ik.hasNext()) { String k = ik.next(); @@ -100,6 +102,22 @@ } } } + + // Search the goal in PE + ik = C.getPendingEvents().keySet().iterator(); + while (ik.hasNext()) { + String k = ik.next(); + if (k.startsWith(suspend.SUSPENDED_INT)) { + Event e = C.getPendingEvents().get(k); + Intention i = e.getIntention(); + if (un.unifies(g, e.getTrigger()) || (i != null && i.hasTrigger(g, un))) { + ik.remove(); + C.addEvent(e); + if (i != null) + i.setSuspended(false); + } + } + } return true; } Modified: trunk/src/jason/stdlib/succeed_goal.java =================================================================== --- trunk/src/jason/stdlib/succeed_goal.java 2011-06-09 18:24:37 UTC (rev 1647) +++ trunk/src/jason/stdlib/succeed_goal.java 2011-06-09 20:19:22 UTC (rev 1648) @@ -110,8 +110,12 @@ for (Event e: C.getEvents()) { // test in the intention Intention i = e.getIntention(); - if (dropIntention(i, g, ts, un) > 1) { + int r = dropIntention(i, g, ts, un); + if (r > 0) { C.removeEvent(e); + if (r == 1) { + C.resumeIntention(i); + } un = bak.clone(); } else { // test in the event @@ -120,13 +124,39 @@ t = t.clone(); t.apply(i.peek().getUnif()); } - if (un.unifies(t, g)) { + if (un.unifies(g, t)) { dropInEvent(ts,e,i); un = bak.clone(); } } } + // dropping G in Pending Events + for (String ek: C.getPendingEvents().keySet()) { + // test in the intention + Event e = C.getPendingEvents().get(ek); + Intention i = e.getIntention(); + int r = dropIntention(i, g, ts, un); + if (r > 0) { + C.removePendingEvent(ek); + if (r == 1) { + C.resumeIntention(i); + } + un = bak.clone(); + } else { + // test in the event + Trigger t = e.getTrigger(); + if (i != Intention.EmptyInt && i.size() > 0) { + t = t.clone(); + t.apply(i.peek().getUnif()); + } + if (un.unifies(g, t)) { + dropInEvent(ts,e,i); + un = bak.clone(); + } + } + } + // dropping from Pending Actions for (ActionExec a: C.getPendingActions().values()) { Intention i = a.getIntention(); Modified: trunk/src/jason/stdlib/suspend.java =================================================================== --- trunk/src/jason/stdlib/suspend.java 2011-06-09 18:24:37 UTC (rev 1647) +++ trunk/src/jason/stdlib/suspend.java 2011-06-09 20:19:22 UTC (rev 1648) @@ -28,15 +28,10 @@ import jason.asSemantics.Circumstance; import jason.asSemantics.DefaultInternalAction; import jason.asSemantics.Event; -import jason.asSemantics.IntendedMeans; import jason.asSemantics.Intention; -import jason.asSemantics.Option; import jason.asSemantics.TransitionSystem; import jason.asSemantics.Unifier; import jason.asSyntax.Literal; -import jason.asSyntax.Plan; -import jason.asSyntax.PlanBody.BodyType; -import jason.asSyntax.PlanBodyImpl; import jason.asSyntax.Term; import jason.asSyntax.Trigger; import jason.asSyntax.Trigger.TEOperator; @@ -147,6 +142,14 @@ // suspending G in Events for (Event e: C.getEvents()) { i = e.getIntention(); + if (un.unifies(g, e.getTrigger()) || (i != null && i.hasTrigger(g, un))) { + C.removeEvent(e); + C.addPendingEvent(k, e); + if (i != null) + i.setSuspended(true); + } + + /* if ( i != null && (i.hasTrigger(g, un) || // the goal is in the i's stack of IM un.unifies(g, e.getTrigger()) // the goal is the trigger of the event @@ -169,7 +172,10 @@ C.removeEvent(e); C.addPendingIntention(k, i); } + */ } + + // TODO: consider the case of suspending something that is already suspended. return true; } Modified: trunk/src/xml/agInspection.xsl =================================================================== --- trunk/src/xml/agInspection.xsl 2011-06-09 18:24:37 UTC (rev 1647) +++ trunk/src/xml/agInspection.xsl 2011-06-09 20:19:22 UTC (rev 1648) @@ -196,6 +196,7 @@ <xsl:if test="@selected='true'"> <b>X</b> </xsl:if> + <xsl:value-of select="@pending" /> </td> <td valign="top" style="{$td-style}"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jom...@us...> - 2012-03-01 18:16:41
|
Revision: 1674 http://jason.svn.sourceforge.net/jason/?rev=1674&view=rev Author: jomifred Date: 2012-03-01 18:16:35 +0000 (Thu, 01 Mar 2012) Log Message: ----------- initial implementation of cyclic terms Modified Paths: -------------- trunk/src/jason/asSemantics/Unifier.java trunk/src/jason/asSyntax/DefaultTerm.java trunk/src/jason/asSyntax/Pred.java trunk/src/jason/asSyntax/Rule.java trunk/src/jason/asSyntax/Structure.java trunk/src/jason/asSyntax/Term.java trunk/src/jason/asSyntax/VarTerm.java trunk/src/test/ListTermTest.java trunk/src/test/RuleTest.java trunk/src/test/TermTest.java trunk/src/test/VarTermTest.java trunk/src/xml/agInspection.xsl Added Paths: ----------- trunk/src/jason/asSyntax/CyclicTerm.java Modified: trunk/src/jason/asSemantics/Unifier.java =================================================================== --- trunk/src/jason/asSemantics/Unifier.java 2011-12-15 22:15:25 UTC (rev 1673) +++ trunk/src/jason/asSemantics/Unifier.java 2012-03-01 18:16:35 UTC (rev 1674) @@ -24,6 +24,7 @@ package jason.asSemantics; import jason.asSyntax.ASSyntax; +import jason.asSyntax.CyclicTerm; import jason.asSyntax.ListTerm; import jason.asSyntax.ListTermImpl; import jason.asSyntax.Literal; @@ -69,6 +70,10 @@ return get(new VarTerm(var)); } + public Term remove(VarTerm v) { + return function.remove(v); + } + /** * gets the value for a Var, if it is unified with another var, gets this * other's value @@ -132,6 +137,11 @@ } } + if (t1g.isCyclicTerm()) // reintroduce cycles in the unifier + bind(t1g.getCyclicVar(), t1g); + if (t2g.isCyclicTerm()) + bind(t2g.getCyclicVar(), t2g); + // unify as Term boolean ok = unifyTerms(t1g, t2g); @@ -161,6 +171,12 @@ } } } + + /*if (t1g.isCyclicTerm()) + remove(t1g.getCyclicVar()); + if (t2g.isCyclicTerm()) + remove(t2g.getCyclicVar()); + */ return ok; } @@ -274,7 +290,7 @@ } // if they are the same (comp == 0), do not bind } - private void bind(VarTerm vt, Term vl) { + public void bind(VarTerm vt, Term vl) { function.put((VarTerm) vt.clone(), vl); } @@ -305,8 +321,15 @@ /** add all unifications from u */ public void compose(Unifier u) { - for (VarTerm k: u.function.keySet()) - function.put( (VarTerm)k.clone(), u.function.get(k).clone()); + for (VarTerm k: u.function.keySet()) { + Term current = get(k); + Term kValue = u.function.get(k); + if (current != null && (current.isVar() || kValue.isVar())) { // current unifier has the new var + unifies(kValue, current); + } else { + function.put( (VarTerm)k.clone(), kValue.clone()); + } + } } @SuppressWarnings("unchecked") Added: trunk/src/jason/asSyntax/CyclicTerm.java =================================================================== --- trunk/src/jason/asSyntax/CyclicTerm.java (rev 0) +++ trunk/src/jason/asSyntax/CyclicTerm.java 2012-03-01 18:16:35 UTC (rev 1674) @@ -0,0 +1,106 @@ +// ---------------------------------------------------------------------------- +// Copyright (C) 2003 Rafael H. Bordini, Jomi F. Hubner, et al. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// To contact the authors: +// http://www.inf.ufrgs.br/~bordini +// http://www.das.ufsc.br/~jomi +// +//---------------------------------------------------------------------------- + +package jason.asSyntax; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import jason.asSemantics.Unifier; + + + +/** + * A term with recursion (cyclic), created by code like X = f(X). + */ +public class CyclicTerm extends LiteralImpl { + + private static final long serialVersionUID = 1L; + + private VarTerm cyclicVar = null; + + /** creates a positive literal */ + public CyclicTerm(Literal t, VarTerm v) { + super(t); + cyclicVar = v; + } + + public VarTerm getCyclicVar() { + return cyclicVar; + } + + @Override + public boolean isCyclicTerm() { + return true; + } + + @Override + public boolean equals(Object o) { + if (o == null) return false; + if (o == this) return true; + + if (o instanceof CyclicTerm) { + final CyclicTerm l = (CyclicTerm) o; + return super.equals(l); + } + return false; + } + + @Override + public Literal makeVarsAnnon(Unifier u) { + super.makeVarsAnnon(u); + VarTerm v = u.deref(cyclicVar); + if (v != null) + cyclicVar = v; + return this; + } + + @Override + public boolean apply(Unifier u) { + Term v = u.remove(cyclicVar); + boolean b = super.apply(u); + if (v != null) + u.bind(cyclicVar, v); + return b; + } + + public Term clone() { + return new CyclicTerm(this, (VarTerm)cyclicVar.copy()); + } + + @Override + protected int calcHashCode() { + return super.calcHashCode() + cyclicVar.calcHashCode(); + } + + public String toString() { + return "..."+super.toString()+"/"+cyclicVar; + } + + @Override + public Element getAsDOM(Document document) { + Element u = super.getAsDOM(document); + u.setAttribute("cyclic-var", cyclicVar.toString()); + return u; + } +} Modified: trunk/src/jason/asSyntax/DefaultTerm.java =================================================================== --- trunk/src/jason/asSyntax/DefaultTerm.java 2011-12-15 22:15:25 UTC (rev 1673) +++ trunk/src/jason/asSyntax/DefaultTerm.java 2012-03-01 18:16:35 UTC (rev 1674) @@ -76,7 +76,10 @@ public boolean isAtom() { return false; } public boolean isPlanBody() { return false; } public boolean isGround() { return true; } - public boolean hasVar(VarTerm t) { return false; } + public boolean isCyclicTerm() { return false; } + public VarTerm getCyclicVar() { return null; } + + public boolean hasVar(VarTerm t, Unifier u) { return false; } public void countVars(Map<VarTerm, Integer> c) {} Modified: trunk/src/jason/asSyntax/Pred.java =================================================================== --- trunk/src/jason/asSyntax/Pred.java 2011-12-15 22:15:25 UTC (rev 1673) +++ trunk/src/jason/asSyntax/Pred.java 2012-03-01 18:16:35 UTC (rev 1674) @@ -217,12 +217,12 @@ } @Override - public boolean hasVar(VarTerm t) { - if (super.hasVar(t)) + public boolean hasVar(VarTerm t, Unifier u) { + if (super.hasVar(t, u)) return true; if (annots != null) for (Term v: annots) - if (v.hasVar(t)) + if (v.hasVar(t, u)) return true; return false; } Modified: trunk/src/jason/asSyntax/Rule.java =================================================================== --- trunk/src/jason/asSyntax/Rule.java 2011-12-15 22:15:25 UTC (rev 1673) +++ trunk/src/jason/asSyntax/Rule.java 2012-03-01 18:16:35 UTC (rev 1674) @@ -102,9 +102,9 @@ } @Override - public boolean hasVar(VarTerm t) { - if (super.hasVar(t)) return true; - return body.hasVar(t); + public boolean hasVar(VarTerm t, Unifier u) { + if (super.hasVar(t, u)) return true; + return body.hasVar(t, u); } public void countVars(Map<VarTerm, Integer> c) { Modified: trunk/src/jason/asSyntax/Structure.java =================================================================== --- trunk/src/jason/asSyntax/Structure.java 2011-12-15 22:15:25 UTC (rev 1673) +++ trunk/src/jason/asSyntax/Structure.java 2012-03-01 18:16:35 UTC (rev 1674) @@ -344,10 +344,10 @@ } @Override - public boolean hasVar(VarTerm t) { + public boolean hasVar(VarTerm t, Unifier u) { final int size = getArity(); for (int i=0; i<size; i++) - if (getTerm(i).hasVar(t)) + if (getTerm(i).hasVar(t, u)) return true; return false; } Modified: trunk/src/jason/asSyntax/Term.java =================================================================== --- trunk/src/jason/asSyntax/Term.java 2011-12-15 22:15:25 UTC (rev 1673) +++ trunk/src/jason/asSyntax/Term.java 2012-03-01 18:16:35 UTC (rev 1674) @@ -27,8 +27,11 @@ public boolean isStructure(); public boolean isAtom(); public boolean isPlanBody(); + public boolean isCyclicTerm(); - public boolean hasVar(VarTerm t); + public boolean hasVar(VarTerm t, Unifier u); + public VarTerm getCyclicVar(); + public void countVars(Map<VarTerm, Integer> c); public Term clone(); Modified: trunk/src/jason/asSyntax/VarTerm.java =================================================================== --- trunk/src/jason/asSyntax/VarTerm.java 2011-12-15 22:15:25 UTC (rev 1673) +++ trunk/src/jason/asSyntax/VarTerm.java 2012-03-01 18:16:35 UTC (rev 1674) @@ -150,15 +150,25 @@ if (value == null) { Term vl = u.get(this); //System.out.println("applying "+this+"="+vl+" un="+u); - if (vl != null) { // && !(vl instanceof VarsCluster)) { - if (!vl.hasVar(this)) { - setValue(vl); - value.apply(u); // in case t has var args - return true; - } else { - logger.warning("Value of variable contains itself, variable "+super.getFunctor()+" "+super.getSrcInfo()+", value="+value); - return false; + if (vl != null) { + if (vl.hasVar(this, u)) { + //logger.warning("The value of a variable contains itself, variable "+super.getFunctor()+" "+super.getSrcInfo()+", value="+vl+", unifier="+u); + + u.remove(this); // remove this var to avoid loops + Term tempVl = vl.clone(); + tempVl.apply(u); + u.bind(this, vl); + + CyclicTerm ct = new CyclicTerm((Literal)tempVl, this); + Unifier renamedVars = new Unifier(); // remove "this" from the value to avoid loops in apply + ct.makeVarsAnnon(renamedVars); + renamedVars.remove(this); + u.compose(renamedVars); + vl = ct; } + setValue(vl); + value.apply(u); // in case t has var args + return true; } } else { return getValue().apply(u); @@ -398,14 +408,42 @@ } @Override - public boolean hasVar(VarTerm t) { - if (value == null) - return equals(t); + public boolean isCyclicTerm() { + return value != null && value.isCyclicTerm(); + } + + @Override + public VarTerm getCyclicVar() { + if (value != null) + return value.getCyclicVar(); else - return value.hasVar(t); + return super.getCyclicVar(); } @Override + public boolean hasVar(VarTerm t, Unifier u) { + if (value != null) + return value.hasVar(t, u); + if (equals(t)) + return true; + + if (u != null) { // if the var has a value in the unifier, search in that value + Term vl = u.get(this); + if (vl != null) { + try { + u.remove(this); // remove this var from the unifier to avoid going to seach inside it again + return vl.hasVar(t, u); + } finally { + u.bind(this, vl); + } + } + + } + + return false; + } + + @Override public void countVars(Map<VarTerm, Integer> c) { if (value == null) { int n = c.containsKey(this) ? c.get(this) : 0; Modified: trunk/src/test/ListTermTest.java =================================================================== --- trunk/src/test/ListTermTest.java 2011-12-15 22:15:25 UTC (rev 1673) +++ trunk/src/test/ListTermTest.java 2012-03-01 18:16:35 UTC (rev 1674) @@ -185,12 +185,15 @@ VarTerm l6 = new VarTerm("L6"); u.unifies(l5, l6); l6.apply(u); + assertEquals(l6.toString(), "[c,b,a,x,y]"); l6.concat(ListTermImpl.parseList("[d]")); + assertEquals(l6.toString(), "[c,b,a,x,y,d]"); ListTerm lf = ListTermImpl.parseList("[c,b,a,x,y,d]"); assertTrue(u.unifies(l6,lf)); lf = ListTermImpl.parseList("[c,b,a,x,y]"); + l5.apply(u); assertTrue(u.unifies(l5,lf)); ListTerm ll = lf.cloneLT(); Modified: trunk/src/test/RuleTest.java =================================================================== --- trunk/src/test/RuleTest.java 2011-12-15 22:15:25 UTC (rev 1673) +++ trunk/src/test/RuleTest.java 2012-03-01 18:16:35 UTC (rev 1674) @@ -138,9 +138,9 @@ assertEquals(1, r.getSingletonVars().size()); assertEquals("[R]", r.getSingletonVars().toString()); - assertTrue(r.hasVar(new VarTerm("X"))); - assertTrue(r.hasVar(new VarTerm("W"))); - assertFalse(r.hasVar(new VarTerm("III"))); + assertTrue(r.hasVar(new VarTerm("X"), null)); + assertTrue(r.hasVar(new VarTerm("W"), null)); + assertFalse(r.hasVar(new VarTerm("III"), null)); } Modified: trunk/src/test/TermTest.java =================================================================== --- trunk/src/test/TermTest.java 2011-12-15 22:15:25 UTC (rev 1673) +++ trunk/src/test/TermTest.java 2012-03-01 18:16:35 UTC (rev 1674) @@ -872,10 +872,20 @@ public void testHasVar() throws ParseException { Literal l = parseLiteral("a(Test,X,Y,b(g([V1,X,V2,V1]),c))[b,source(Y),B,kk(_),oo(oo(OO))]"); - assertTrue(l.hasVar(new VarTerm("X"))); - assertTrue(l.hasVar(new VarTerm("V2"))); - assertTrue(l.hasVar(new VarTerm("OO"))); - assertFalse(l.hasVar(new VarTerm("O"))); + assertTrue(l.hasVar(new VarTerm("X"), null)); + assertTrue(l.hasVar(new VarTerm("V2"), null)); + assertTrue(l.hasVar(new VarTerm("OO"), null)); + assertFalse(l.hasVar(new VarTerm("O"), null)); + + Unifier u = new Unifier(); + u.unifies(parseTerm("X"), parseTerm("f(Y)")); + u.unifies(parseTerm("Y"), parseTerm("g(X)")); + u.unifies(parseTerm("T"), parseTerm("X")); + VarTerm t = new VarTerm("T"); + assertFalse(t.hasVar(new VarTerm("X"), null)); + assertTrue(t.hasVar(new VarTerm("X"), u)); + assertFalse(t.hasVar(new VarTerm("Y"), null)); + assertTrue(t.hasVar(new VarTerm("Y"), u)); } public void testSingletonVars() { @@ -974,4 +984,85 @@ assertTrue(variable.equals(term)); assertTrue(variable.equals(new ObjectTermImpl("test"))); } + + public void testCyclicTerm1() throws ParseException { + Term t1 = parseTerm("f(f(g(X)))"); + Term v1 = new VarTerm("X"); + Unifier u = new Unifier(); + + assertTrue(u.unifies(t1, v1)); + + assertTrue(u.unifies(v1, parseTerm("f(f(g(f(f(g(_))))))"))); + assertTrue(u.unifies(v1, parseTerm("f(f(g(f(f(g(f(f(g(_)))))))))"))); + assertFalse(u.unifies(v1, parseTerm("f(f(g(f(f(g(f(g(_))))))))"))); + assertFalse(u.unifies(v1, parseTerm("f(f(g(f(f(p(_))))))"))); + + assertTrue(v1.apply(u)); + assertTrue(new Unifier().unifies(v1, parseTerm("f(f(g(f(f(g(_))))))"))); + assertTrue(new Unifier().unifies(v1, parseTerm("f(f(g(f(f(g(f(f(g(_)))))))))"))); + assertTrue(new Unifier().unifies(v1, parseTerm("f(f(g(f(f(g(f(f(_))))))))"))); + assertFalse(new Unifier().unifies(v1, parseTerm("f(f(g(f(f(g(f(g(_))))))))"))); + assertFalse(new Unifier().unifies(v1, parseTerm("f(_,_)"))); + assertFalse(new Unifier().unifies(v1, parseTerm("f(f(g(f(f(p(K))))))"))); + + u = new Unifier(); + assertTrue(u.unifies(v1, parseTerm("f(f(g(f(f(g(K))))))"))); + assertTrue(u.get("K").isCyclicTerm()); + VarTerm k = new VarTerm("K"); + k.apply(u); + assertTrue(k.isCyclicTerm()); + + u = new Unifier(); + assertTrue(u.unifies(v1, parseTerm("f(f(g(f(f(H)))))"))); + VarTerm h = new VarTerm("H"); + h.apply(u); + assertTrue(h.getTerm(0).isCyclicTerm()); + } + + public void testCyclicTerm2() throws ParseException { + Term t1 = parseTerm("f(f(g(X,H)))"); + VarTerm v1 = new VarTerm("X"); + Unifier u = new Unifier(); + + assertTrue(u.unifies(t1, v1)); + assertTrue(u.unifies(v1, parseTerm("f(f(g(_,_)))"))); + assertTrue(u.unifies(v1, parseTerm("f(f(g(f(f(g(_,_))),_)))"))); + + assertTrue(u.unifies(new VarTerm("H"), parseTerm("100"))); + assertTrue(v1.apply(u)); + assertTrue(v1.toString().indexOf("100") > 0); + } + + public void testCyclicTerm3() throws ParseException { + Unifier u = new Unifier(); + + assertTrue(u.unifies(new VarTerm("Merge"), parseTerm("choice([Off,Fork])"))); + assertTrue(u.unifies(new VarTerm("Off"), parseTerm("seq(tell(b,c,offer),seq(tell(c,b,counter),Merge))"))); + assertTrue(u.unifies(new VarTerm("Fork"), parseTerm("fork(seq(tell(b,s,final),end),seq(tell(b,c,result),end))"))); + assertTrue(u.unifies(new VarTerm("Glob"), parseTerm("seq(tell(s,b,item),Merge)"))); + + //assertTrue(u.unifies(new VarTerm("X"), parseTerm("f(Y)"))); + //assertTrue(u.unifies(new VarTerm("Y"), parseTerm("g(X)"))); + + //System.out.println(u); + VarTerm m = new VarTerm("Glob"); + m.apply(u); + assertTrue(m.getTerm(1).isCyclicTerm()); + } + + public void testCyclicTerm4() throws ParseException { + Unifier u = new Unifier(); + + assertTrue(u.unifies(new VarTerm("X"), parseTerm("f(Y)"))); + assertTrue(u.unifies(new VarTerm("Y"), parseTerm("g(X)"))); + + //System.out.println(u); + VarTerm x = new VarTerm("X"); + x.apply(u); + assertTrue(x.isCyclicTerm()); + VarTerm y = new VarTerm("Y"); + y.apply(u); + assertTrue(y.isCyclicTerm()); + } + } Modified: trunk/src/test/VarTermTest.java =================================================================== --- trunk/src/test/VarTermTest.java 2011-12-15 22:15:25 UTC (rev 1673) +++ trunk/src/test/VarTermTest.java 2012-03-01 18:16:35 UTC (rev 1674) @@ -97,7 +97,7 @@ u.unifies(v1, lt); // L = [a,B,a(B)] v1.apply(u); ListTerm vlt = (ListTerm) v1.getValue(); - assertFalse(vlt.equals(lt)); // the apply in var should not change the orginal list + assertFalse(vlt.equals(lt)); // the apply in var should not change the original list Iterator<Term> i = vlt.iterator(); i.next(); i.next(); Modified: trunk/src/xml/agInspection.xsl =================================================================== --- trunk/src/xml/agInspection.xsl 2011-12-15 22:15:25 UTC (rev 1673) +++ trunk/src/xml/agInspection.xsl 2012-03-01 18:16:35 UTC (rev 1674) @@ -525,6 +525,9 @@ <xsl:if test="@negated = 'true'"> <b><xsl:text>~</xsl:text></b> </xsl:if> + <xsl:if test="count(@cyclic-var) > 0"> + <b><xsl:text>...</xsl:text></b> + </xsl:if> <xsl:apply-templates /> </xsl:template> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jom...@us...> - 2012-03-05 21:23:18
|
Revision: 1675 http://jason.svn.sourceforge.net/jason/?rev=1675&view=rev Author: jomifred Date: 2012-03-05 21:23:12 +0000 (Mon, 05 Mar 2012) Log Message: ----------- improvements in cycled terms Modified Paths: -------------- trunk/src/jason/asSemantics/Unifier.java trunk/src/jason/asSyntax/Structure.java trunk/src/jason/asSyntax/VarTerm.java trunk/src/test/TermTest.java Modified: trunk/src/jason/asSemantics/Unifier.java =================================================================== --- trunk/src/jason/asSemantics/Unifier.java 2012-03-01 18:16:35 UTC (rev 1674) +++ trunk/src/jason/asSemantics/Unifier.java 2012-03-05 21:23:12 UTC (rev 1675) @@ -28,6 +28,7 @@ import jason.asSyntax.ListTerm; import jason.asSyntax.ListTermImpl; import jason.asSyntax.Literal; +import jason.asSyntax.LiteralImpl; import jason.asSyntax.Pred; import jason.asSyntax.Structure; import jason.asSyntax.Term; @@ -137,10 +138,26 @@ } } - if (t1g.isCyclicTerm()) // reintroduce cycles in the unifier - bind(t1g.getCyclicVar(), t1g); - if (t2g.isCyclicTerm()) - bind(t2g.getCyclicVar(), t2g); + if (t1g.isCyclicTerm() && t2g.isCyclicTerm()) { // both are cycled terms + // unification of cyclic terms: + // remove the vars (to avoid loops) and test just the structure, then reintroduce the vars + VarTerm v1 = t1g.getCyclicVar(); + VarTerm v2 = t2g.getCyclicVar(); + remove(v1); + remove(v2); + try { + return unifiesNoUndo(new LiteralImpl((Literal)t1g), new LiteralImpl((Literal)t2g)); + } finally { + function.put(v1, t1g); + function.put(v2, t1g); + } + + } else { + if (t1g.isCyclicTerm() && get(t1g.getCyclicVar()) == null) // reintroduce cycles in the unifier + function.put(t1g.getCyclicVar(), t1g); + if (t2g.isCyclicTerm() && get(t2g.getCyclicVar()) == null) + function.put(t2g.getCyclicVar(), t2g); + } // unify as Term boolean ok = unifyTerms(t1g, t2g); @@ -291,6 +308,10 @@ } public void bind(VarTerm vt, Term vl) { + if (!vl.isCyclicTerm() && vl.hasVar(vt, this)) { + vl = new CyclicTerm((Literal)vl, (VarTerm)vt.clone()); + //System.out.println("changing "+vt+" <- "+vl+" in "+this); + } function.put((VarTerm) vt.clone(), vl); } Modified: trunk/src/jason/asSyntax/Structure.java =================================================================== --- trunk/src/jason/asSyntax/Structure.java 2012-03-01 18:16:35 UTC (rev 1674) +++ trunk/src/jason/asSyntax/Structure.java 2012-03-05 21:23:12 UTC (rev 1675) @@ -295,7 +295,7 @@ // if the variable hasn't been renamed given the input unifier, then rename it. if (deref.equals(vt)) { // forget the name - VarTerm var = new UnnamedVar("_" + UnnamedVar.getUniqueId() + t); + VarTerm var = new UnnamedVar(); //("_" + UnnamedVar.getUniqueId() + t); // if deref has annotations then we need to replicate these in the new variable if (deref.hasAnnot()) { var.setAnnots(deref.getAnnots().cloneLT()); Modified: trunk/src/jason/asSyntax/VarTerm.java =================================================================== --- trunk/src/jason/asSyntax/VarTerm.java 2012-03-01 18:16:35 UTC (rev 1674) +++ trunk/src/jason/asSyntax/VarTerm.java 2012-03-05 21:23:12 UTC (rev 1675) @@ -151,10 +151,10 @@ Term vl = u.get(this); //System.out.println("applying "+this+"="+vl+" un="+u); if (vl != null) { - if (vl.hasVar(this, u)) { + if (!vl.isCyclicTerm() && vl.hasVar(this, u)) { //logger.warning("The value of a variable contains itself, variable "+super.getFunctor()+" "+super.getSrcInfo()+", value="+vl+", unifier="+u); - u.remove(this); // remove this var to avoid loops + u.remove(this); // remove this var to avoid loops in the apply below Term tempVl = vl.clone(); tempVl.apply(u); u.bind(this, vl); Modified: trunk/src/test/TermTest.java =================================================================== --- trunk/src/test/TermTest.java 2012-03-01 18:16:35 UTC (rev 1674) +++ trunk/src/test/TermTest.java 2012-03-05 21:23:12 UTC (rev 1675) @@ -1065,4 +1065,19 @@ assertTrue(y.isCyclicTerm()); } + public void testCyclicTerm5() throws ParseException { + Term t1 = parseTerm("f(f(g(X)))"); + VarTerm v1 = new VarTerm("X"); + + Term t2 = parseTerm("f(f(g(Y)))"); + VarTerm v2 = new VarTerm("Y"); + + Unifier u = new Unifier(); + + assertTrue(u.unifies(t1, v1)); + assertTrue(u.get(v1).isCyclicTerm()); + assertTrue(u.unifies(t2, v2)); + assertTrue(new Unifier().unifies(t1, t2)); + assertTrue(u.unifies(v1, v2)); + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <xsp...@us...> - 2012-04-11 18:31:09
|
Revision: 1680 http://jason.svn.sourceforge.net/jason/?rev=1680&view=rev Author: xsplyter Date: 2012-04-11 18:30:58 +0000 (Wed, 11 Apr 2012) Log Message: ----------- Added CArtAgO artifact template Removed artifact template Modified Paths: -------------- trunk/src/jason/asSyntax/parser/as2j.java trunk/src/jason/asSyntax/parser/as2jTokenManager.java trunk/src/jason/mas2j/parser/mas2jTokenManager.java Added Paths: ----------- trunk/src/templates/CArtAgOartifact Removed Paths: ------------- trunk/src/templates/artifact Modified: trunk/src/jason/asSyntax/parser/as2j.java =================================================================== --- trunk/src/jason/asSyntax/parser/as2j.java 2012-04-02 14:53:14 UTC (rev 1679) +++ trunk/src/jason/asSyntax/parser/as2j.java 2012-04-11 18:30:58 UTC (rev 1680) @@ -1575,11 +1575,6 @@ return false; } - final private boolean jj_3R_44() { - if (jj_scan_token(40)) return true; - return false; - } - final private boolean jj_3R_52() { Token xsp; xsp = jj_scanpos; @@ -1588,6 +1583,11 @@ return false; } + final private boolean jj_3R_44() { + if (jj_scan_token(40)) return true; + return false; + } + final private boolean jj_3R_85() { if (jj_3R_91()) return true; return false; @@ -1710,13 +1710,13 @@ return false; } - final private boolean jj_3R_41() { - if (jj_scan_token(34)) return true; + final private boolean jj_3R_82() { + if (jj_3R_80()) return true; return false; } - final private boolean jj_3R_82() { - if (jj_3R_80()) return true; + final private boolean jj_3R_41() { + if (jj_scan_token(34)) return true; return false; } @@ -1726,6 +1726,16 @@ return false; } + final private boolean jj_3R_75() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_82()) { + jj_scanpos = xsp; + if (jj_3R_83()) return true; + } + return false; + } + final private boolean jj_3_2() { Token xsp; xsp = jj_scanpos; @@ -1738,16 +1748,6 @@ return false; } - final private boolean jj_3R_75() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_82()) { - jj_scanpos = xsp; - if (jj_3R_83()) return true; - } - return false; - } - final private boolean jj_3R_37() { if (jj_scan_token(30)) return true; Token xsp; @@ -1854,13 +1854,13 @@ return false; } - final private boolean jj_3R_39() { - if (jj_scan_token(30)) return true; + final private boolean jj_3R_74() { + if (jj_3R_37()) return true; return false; } - final private boolean jj_3R_74() { - if (jj_3R_37()) return true; + final private boolean jj_3R_39() { + if (jj_scan_token(30)) return true; return false; } @@ -1999,13 +1999,13 @@ return false; } - final private boolean jj_3R_26() { - if (jj_3R_42()) return true; + final private boolean jj_3R_36() { + if (jj_3R_48()) return true; return false; } - final private boolean jj_3R_36() { - if (jj_3R_48()) return true; + final private boolean jj_3R_26() { + if (jj_3R_42()) return true; return false; } @@ -2029,13 +2029,13 @@ return false; } - final private boolean jj_3R_24() { - if (jj_3R_40()) return true; + final private boolean jj_3R_21() { + if (jj_3R_37()) return true; return false; } - final private boolean jj_3R_21() { - if (jj_3R_37()) return true; + final private boolean jj_3R_24() { + if (jj_3R_40()) return true; return false; } @@ -2049,17 +2049,17 @@ return false; } - final private boolean jj_3R_23() { - if (jj_3R_39()) return true; - return false; - } - final private boolean jj_3R_20() { if (jj_scan_token(42)) return true; if (jj_3R_36()) return true; return false; } + final private boolean jj_3R_23() { + if (jj_3R_39()) return true; + return false; + } + final private boolean jj_3R_92() { Token xsp; xsp = jj_scanpos; Modified: trunk/src/jason/asSyntax/parser/as2jTokenManager.java =================================================================== --- trunk/src/jason/asSyntax/parser/as2jTokenManager.java 2012-04-02 14:53:14 UTC (rev 1679) +++ trunk/src/jason/asSyntax/parser/as2jTokenManager.java 2012-04-11 18:30:58 UTC (rev 1680) @@ -30,10 +30,10 @@ jjmatchedKind = 23; return 43; } + if ((active0 & 0x800000000000000L) != 0L) + return 14; if ((active0 & 0x200000000L) != 0L) return 44; - if ((active0 & 0x800000000000000L) != 0L) - return 14; return -1; case 1: if ((active0 & 0x20000L) != 0L) @@ -399,25 +399,19 @@ jjCheckNAddTwoStates(28, 29); } break; - case 14: - if (curChar == 42) - jjCheckNAddTwoStates(20, 21); - else if (curChar == 47) - jjCheckNAddStates(0, 2); - break; case 0: if ((0x3ff000000000000L & l) != 0L) { if (kind > 21) kind = 21; - jjCheckNAddStates(3, 7); + jjCheckNAddStates(0, 4); } else if (curChar == 46) jjCheckNAddTwoStates(28, 32); else if (curChar == 47) - jjAddStates(8, 9); + jjAddStates(5, 6); else if (curChar == 34) - jjCheckNAddStates(10, 12); + jjCheckNAddStates(7, 9); if ((0x3ff000000000000L & l) != 0L) { if (kind > 25) @@ -434,13 +428,19 @@ else if (curChar == 46) jjCheckNAdd(32); break; + case 14: + if (curChar == 42) + jjCheckNAddTwoStates(20, 21); + else if (curChar == 47) + jjCheckNAddStates(10, 12); + break; case 1: if ((0xfffffffbffffdbffL & l) != 0L) - jjCheckNAddStates(10, 12); + jjCheckNAddStates(7, 9); break; case 3: if ((0x8400000000L & l) != 0L) - jjCheckNAddStates(10, 12); + jjCheckNAddStates(7, 9); break; case 4: if (curChar == 34 && kind > 22) @@ -452,7 +452,7 @@ break; case 6: if ((0xff000000000000L & l) != 0L) - jjCheckNAddStates(10, 12); + jjCheckNAddStates(7, 9); break; case 7: if ((0xf000000000000L & l) != 0L) @@ -475,11 +475,11 @@ break; case 13: if (curChar == 47) - jjAddStates(8, 9); + jjAddStates(5, 6); break; case 15: if ((0xffffffffffffdbffL & l) != 0L) - jjCheckNAddStates(0, 2); + jjCheckNAddStates(10, 12); break; case 16: if ((0x2400L & l) != 0L && kind > 5) @@ -562,7 +562,7 @@ break; if (kind > 21) kind = 21; - jjCheckNAddStates(3, 7); + jjCheckNAddStates(0, 4); break; case 36: if ((0x3ff000000000000L & l) == 0L) @@ -652,7 +652,7 @@ break; case 1: if ((0xffffffffefffffffL & l) != 0L) - jjCheckNAddStates(10, 12); + jjCheckNAddStates(7, 9); break; case 2: if (curChar == 92) @@ -660,7 +660,7 @@ break; case 3: if ((0x14404410000000L & l) != 0L) - jjCheckNAddStates(10, 12); + jjCheckNAddStates(7, 9); break; case 9: if (curChar != 95) @@ -685,7 +685,7 @@ kind = 26; break; case 15: - jjAddStates(0, 2); + jjAddStates(10, 12); break; case 20: jjCheckNAddTwoStates(20, 21); @@ -737,11 +737,11 @@ { case 1: if ((jjbitVec0[i2] & l2) != 0L) - jjAddStates(10, 12); + jjAddStates(7, 9); break; case 15: if ((jjbitVec0[i2] & l2) != 0L) - jjAddStates(0, 2); + jjAddStates(10, 12); break; case 20: if ((jjbitVec0[i2] & l2) != 0L) @@ -770,7 +770,7 @@ } } static final int[] jjnextStates = { - 15, 16, 18, 36, 37, 38, 39, 40, 14, 19, 1, 2, 4, 1, 2, 6, + 36, 37, 38, 39, 40, 14, 19, 1, 2, 4, 15, 16, 18, 1, 2, 6, 4, 21, 22, 24, 3, 5, 7, 30, 31, 41, 42, }; public static final String[] jjstrLiteralImages = { Modified: trunk/src/jason/mas2j/parser/mas2jTokenManager.java =================================================================== --- trunk/src/jason/mas2j/parser/mas2jTokenManager.java 2012-04-02 14:53:14 UTC (rev 1679) +++ trunk/src/jason/mas2j/parser/mas2jTokenManager.java 2012-04-11 18:30:58 UTC (rev 1680) @@ -16,11 +16,6 @@ switch (pos) { case 0: - if ((active0 & 0x712ff00L) != 0L) - { - jjmatchedKind = 29; - return 88; - } if ((active0 & 0x40000000000L) != 0L) return 45; if ((active0 & 0x400000L) != 0L) @@ -28,10 +23,10 @@ jjmatchedKind = 29; return 14; } - if ((active0 & 0x80000L) != 0L) + if ((active0 & 0x712ff00L) != 0L) { jjmatchedKind = 29; - return 21; + return 88; } if ((active0 & 0x80L) != 0L) { @@ -43,19 +38,26 @@ jjmatchedKind = 29; return 5; } + if ((active0 & 0x80000L) != 0L) + { + jjmatchedKind = 29; + return 21; + } return -1; case 1: - if ((active0 & 0x200000L) != 0L) + if ((active0 & 0x800L) != 0L) + return 90; + if ((active0 & 0x75af700L) != 0L) { jjmatchedKind = 29; jjmatchedPos = 1; - return 4; + return 90; } - if ((active0 & 0x75af700L) != 0L) + if ((active0 & 0x200000L) != 0L) { jjmatchedKind = 29; jjmatchedPos = 1; - return 90; + return 4; } if ((active0 & 0x80L) != 0L) { @@ -63,8 +65,6 @@ jjmatchedPos = 1; return 78; } - if ((active0 & 0x800L) != 0L) - return 90; return -1; case 2: if ((active0 & 0x77af700L) != 0L) @@ -85,24 +85,24 @@ } return -1; case 4: + if ((active0 & 0x80000L) != 0L) + return 90; if ((active0 & 0x772f700L) != 0L) { jjmatchedKind = 29; jjmatchedPos = 4; return 90; } - if ((active0 & 0x80000L) != 0L) - return 90; return -1; case 5: + if ((active0 & 0x8100L) != 0L) + return 90; if ((active0 & 0x7727600L) != 0L) { jjmatchedKind = 29; jjmatchedPos = 5; return 90; } - if ((active0 & 0x8100L) != 0L) - return 90; return -1; case 6: if ((active0 & 0x120000L) != 0L) @@ -123,14 +123,14 @@ } return -1; case 8: + if ((active0 & 0x2000L) != 0L) + return 90; if ((active0 & 0x7605600L) != 0L) { jjmatchedKind = 29; jjmatchedPos = 8; return 90; } - if ((active0 & 0x2000L) != 0L) - return 90; return -1; case 9: if ((active0 & 0x1200000L) != 0L) @@ -143,14 +143,14 @@ } return -1; case 10: + if ((active0 & 0x200L) != 0L) + return 90; if ((active0 & 0x6405400L) != 0L) { jjmatchedKind = 29; jjmatchedPos = 10; return 90; } - if ((active0 & 0x200L) != 0L) - return 90; return -1; case 11: if ((active0 & 0x400000L) != 0L) @@ -173,14 +173,14 @@ } return -1; case 13: + if ((active0 & 0x2001000L) != 0L) + return 90; if ((active0 & 0x4000400L) != 0L) { jjmatchedKind = 29; jjmatchedPos = 13; return 90; } - if ((active0 & 0x2001000L) != 0L) - return 90; return -1; case 14: if ((active0 & 0x4000000L) != 0L) @@ -823,7 +823,7 @@ jjCheckNAddTwoStates(46, 47); } break; - case 89: + case 21: if ((0x3ff000000000000L & l) != 0L) { if (kind > 30) @@ -835,36 +835,14 @@ if (kind > 32) kind = 32; } - if (curChar == 58) - { - if (kind > 31) - kind = 31; - jjCheckNAddTwoStates(46, 47); - } - break; - case 90: if ((0x3ff000000000000L & l) != 0L) { - if (kind > 30) - kind = 30; - jjCheckNAdd(78); - } - if ((0x3ff000000000000L & l) != 0L) - { if (kind > 29) kind = 29; jjCheckNAdd(76); } - break; - case 45: - if ((0x3ff000000000000L & l) != 0L) + else if (curChar == 58) { - if (kind > 27) - kind = 27; - jjCheckNAddTwoStates(32, 33); - } - else if (curChar == 47) - { if (kind > 31) kind = 31; jjCheckNAddTwoStates(46, 47); @@ -884,7 +862,7 @@ jjCheckNAdd(76); } break; - case 14: + case 5: if ((0x3ff000000000000L & l) != 0L) { if (kind > 30) @@ -909,7 +887,7 @@ jjCheckNAddTwoStates(46, 47); } break; - case 5: + case 14: if ((0x3ff000000000000L & l) != 0L) { if (kind > 30) @@ -956,26 +934,48 @@ else if (curChar == 46) jjCheckNAdd(32); break; - case 21: + case 45: if ((0x3ff000000000000L & l) != 0L) { + if (kind > 27) + kind = 27; + jjCheckNAddTwoStates(32, 33); + } + else if (curChar == 47) + { + if (kind > 31) + kind = 31; + jjCheckNAddTwoStates(46, 47); + } + break; + case 90: + if ((0x3ff000000000000L & l) != 0L) + { if (kind > 30) kind = 30; jjCheckNAdd(78); } - else if (curChar == 58) - { - if (kind > 32) - kind = 32; - } if ((0x3ff000000000000L & l) != 0L) { if (kind > 29) kind = 29; jjCheckNAdd(76); } + break; + case 89: + if ((0x3ff000000000000L & l) != 0L) + { + if (kind > 30) + kind = 30; + jjCheckNAdd(78); + } else if (curChar == 58) { + if (kind > 32) + kind = 32; + } + if (curChar == 58) + { if (kind > 31) kind = 31; jjCheckNAddTwoStates(46, 47); @@ -1181,15 +1181,7 @@ jjCheckNAdd(76); } break; - case 89: - case 78: - if ((0x7fffffe87fffffeL & l) == 0L) - break; - if (kind > 30) - kind = 30; - jjCheckNAdd(78); - break; - case 90: + case 21: if ((0x7fffffe87fffffeL & l) != 0L) { if (kind > 30) @@ -1202,6 +1194,8 @@ kind = 29; jjCheckNAdd(76); } + if (curChar == 101) + jjstateSet[jjnewStateCnt++] = 20; break; case 4: if ((0x7fffffe87fffffeL & l) != 0L) @@ -1219,7 +1213,7 @@ if (curChar == 115) jjstateSet[jjnewStateCnt++] = 3; break; - case 14: + case 5: if ((0x7fffffe87fffffeL & l) != 0L) { if (kind > 30) @@ -1232,10 +1226,10 @@ kind = 29; jjCheckNAdd(76); } - if (curChar == 97) - jjstateSet[jjnewStateCnt++] = 13; + if (curChar == 105) + jjstateSet[jjnewStateCnt++] = 4; break; - case 5: + case 14: if ((0x7fffffe87fffffeL & l) != 0L) { if (kind > 30) @@ -1248,8 +1242,8 @@ kind = 29; jjCheckNAdd(76); } - if (curChar == 105) - jjstateSet[jjnewStateCnt++] = 4; + if (curChar == 97) + jjstateSet[jjnewStateCnt++] = 13; break; case 6: if ((0x7fffffe07fffffeL & l) != 0L) @@ -1288,7 +1282,7 @@ else if (curChar == 100) jjstateSet[jjnewStateCnt++] = 5; break; - case 21: + case 90: if ((0x7fffffe87fffffeL & l) != 0L) { if (kind > 30) @@ -1301,9 +1295,15 @@ kind = 29; jjCheckNAdd(76); } - if (curChar == 101) - jjstateSet[jjnewStateCnt++] = 20; break; + case 89: + case 78: + if ((0x7fffffe87fffffeL & l) == 0L) + break; + if (kind > 30) + kind = 30; + jjCheckNAdd(78); + break; case 0: if (curChar == 100 && kind > 16) kind = 16; Added: trunk/src/templates/CArtAgOartifact =================================================================== --- trunk/src/templates/CArtAgOartifact (rev 0) +++ trunk/src/templates/CArtAgOartifact 2012-04-11 18:30:58 UTC (rev 1680) @@ -0,0 +1,19 @@ +// CArtAgO artifact code for project <PROJECT_NAME> + +package <PCK>; + +import cartago.*; + +public class <ARTIFACT_NAME> extends <SUPER_CLASS> { + void init(int initialValue) { + defineObsProperty("count", initialValue); + } + + @OPERATION + void inc() { + ObsProperty prop = getObsProperty("count"); + prop.updateValue(prop.intValue()+1); + signal("tick"); + } +} + Deleted: trunk/src/templates/artifact =================================================================== --- trunk/src/templates/artifact 2012-04-02 14:53:14 UTC (rev 1679) +++ trunk/src/templates/artifact 2012-04-11 18:30:58 UTC (rev 1680) @@ -1,10 +0,0 @@ -// CArtAgO artifact code for project <PROJECT_NAME> - -package <PCK>; - -import cartago.*; - -public class <ARTIFACT_NAME> extends <SUPER_CLASS> { - -} - This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jom...@us...> - 2013-07-14 00:40:42
|
Revision: 1738 http://sourceforge.net/p/jason/svn/1738 Author: jomifred Date: 2013-07-14 00:40:37 +0000 (Sun, 14 Jul 2013) Log Message: ----------- improve subset implementation Modified Paths: -------------- trunk/src/jason/asSyntax/ListTermImpl.java trunk/src/jason/asSyntax/Literal.java trunk/src/test/ListTermTest.java Modified: trunk/src/jason/asSyntax/ListTermImpl.java =================================================================== --- trunk/src/jason/asSyntax/ListTermImpl.java 2013-07-13 20:14:39 UTC (rev 1737) +++ trunk/src/jason/asSyntax/ListTermImpl.java 2013-07-14 00:40:37 UTC (rev 1738) @@ -418,16 +418,24 @@ } /** returns all subsets that take k elements of this list */ - public Iterator<List<Term>> subSets(int k) { - // DFS algorithm - final List<SubSetSearchState> open = new LinkedList<SubSetSearchState>(); // states to explore - open.add(new SubSetSearchState(new ArrayList<Term>(), getAsList(), k)); // initial state (root of search tree) + public Iterator<List<Term>> subSets(final int k) { + // based on a DFS algorithm return new Iterator<List<Term>>() { + LinkedList<SubSetSearchState> open = null; + Term[] thisAsArray = new Term[0]; + List<Term> next = null; public boolean hasNext() { - if (next == null) + if (open == null) { + open = new LinkedList<SubSetSearchState>(); // states to explore + //open.add(new SubSetSearchState(new ArrayList<Term>(), getAsList(), k)); // initial state (root of search tree) + thisAsArray = getAsList().toArray(thisAsArray); + open.add(new SubSetSearchState(0, k, null, null)); // initial state (root of search tree) + } + if (next == null) { getNext(); + } return next != null; } @@ -439,37 +447,71 @@ void getNext() { while (! open.isEmpty() ) { - SubSetSearchState s = open.remove(0); - if (s.k == 0) { - next = s.prefix; + SubSetSearchState s = open.removeFirst(); + if (s.d == 0) { + next = s.getAsList(); return; } else { - s.addNexts(open); + s.addNexts(); } } next = null; } public void remove() { } + + class SubSetSearchState { + int pos; + int d; + Term value = null; + SubSetSearchState f = null; + + SubSetSearchState(int pos, int d, Term t, SubSetSearchState father) { + this.pos = pos; this.d = d; this.value = t; this.f = father; + } + void addNexts() { + int pSize = (k-d)+thisAsArray.length; + for (int i = thisAsArray.length-1; i >= pos; i--) { + if (pSize-i >= k) { + open.addFirst(new SubSetSearchState(i+1, d-1, thisAsArray[i], this)); + } + } + } + + List<Term> getAsList() { + LinkedList<Term> np = new LinkedList<Term>(); + SubSetSearchState c = this; + while (c.value != null) { + np.addFirst(c.value); + c = c.f; + } + return np; + } + } + + /*// old code + class SubSetSearchState { + List<Term> prefix, elements; + int d; + SubSetSearchState(List<Term> p, List<Term> e, int d) { + prefix = p; elements = e; this.d = d; + } + void addNexts(List<SubSetSearchState> open) { + int esize = elements.size(); + int maxNextSize = prefix.size()+esize; + for (int i = esize-1; i >= 0; i--) { + if (maxNextSize-i >= k) { + List<Term> np = new ArrayList<Term>(prefix); + np.add(elements.get(i)); + open.add(0, new SubSetSearchState(np, elements.subList(i+1, esize), d-1)); + } + } + } + } + */ }; } - class SubSetSearchState { - List<Term> prefix, elements; - int k; - SubSetSearchState(List<Term> p, List<Term> e, int k) { - prefix = p; elements = e; this.k = k; - } - void addNexts(List<SubSetSearchState> open) { - int esize = elements.size(); - for (int i = esize-1; i >= 0; i--) { - List<Term> np = new ArrayList<Term>(prefix); - np.add(elements.get(i)); - open.add(0, new SubSetSearchState(np, elements.subList(i+1, esize), k-1)); - } - } - } - /* public List<List<Term>> subSets(int k) { List<List<Term>> result = new ArrayList<List<Term>>(); Modified: trunk/src/jason/asSyntax/Literal.java =================================================================== --- trunk/src/jason/asSyntax/Literal.java 2013-07-13 20:14:39 UTC (rev 1737) +++ trunk/src/jason/asSyntax/Literal.java 2013-07-14 00:40:37 UTC (rev 1738) @@ -351,7 +351,6 @@ if (annotsOptions != null) { while (annotsOptions.hasNext()) { Literal belToTry = belInBB.copy().setAnnots(null).addAnnots( annotsOptions.next() ); - Unifier u = un.clone(); if (u.unifiesNoUndo(Literal.this, belToTry)) { current = u; @@ -445,8 +444,6 @@ if (belInBB.hasAnnot()) { int nbAnnotsB = belInBB.getAnnots().size(); if (nbAnnotsB >= nbAnnots) { - if (nbAnnots > 5) - logger.warning("I am generating "+Math.pow(2, nbAnnots)+" subsets for the annotation backtracking consult of "+Literal.this); annotsOptions = belInBB.getAnnots().subSets( nbAnnots ); get(); if (current != null) // if it get a value Modified: trunk/src/test/ListTermTest.java =================================================================== --- trunk/src/test/ListTermTest.java 2013-07-13 20:14:39 UTC (rev 1737) +++ trunk/src/test/ListTermTest.java 2013-07-14 00:40:37 UTC (rev 1738) @@ -334,14 +334,17 @@ public void testSubSet() { ListTerm l3 = ListTermImpl.parseList("[a,b,c,8]"); - /*Set<PredicateIndicator> types = new HashSet<PredicateIndicator>(); - types.add( ((Literal)l3.get(1) ).getPredicateIndicator()); - types.add( ((Literal)l3.get(2) ).getPredicateIndicator()); - types.add( ((Literal)l3.get(3) ).getPredicateIndicator());*/ assertEquals("[[a], [b], [c], [8]]", iterator2list(l3.subSets(1)).toString()); assertEquals("[[a, b], [a, c], [a, 8], [b, c], [b, 8], [c, 8]]", iterator2list(l3.subSets(2)).toString()); assertEquals("[[a, b, c], [a, b, 8], [a, c, 8], [b, c, 8]]", iterator2list(l3.subSets(3)).toString()); assertEquals("[[a, b, c, 8]]", iterator2list(l3.subSets(4)).toString()); + + l3 = ListTermImpl.parseList("[a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20]"); + //for (int i=0; i< 20;i++) + // System.out.println(iterator2list(l3.subSets(i+1)).size()); + assertEquals("[[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20]]",iterator2list(l3.subSets(20)).toString()); + assertEquals(38760, iterator2list(l3.subSets(6)).size()); + assertEquals(38760, iterator2list(l3.subSets(14)).size()); } public void testMkVarAn() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jom...@us...> - 2013-08-15 14:15:37
|
Revision: 1742 http://sourceforge.net/p/jason/svn/1742 Author: jomifred Date: 2013-08-15 14:15:34 +0000 (Thu, 15 Aug 2013) Log Message: ----------- include a "clear" method in BB implements "remove()" for BB iterator Modified Paths: -------------- trunk/src/jason/bb/BeliefBase.java trunk/src/jason/bb/ChainBBAdapter.java trunk/src/jason/bb/DefaultBeliefBase.java trunk/src/jason/bb/JDBCPersistentBB.java trunk/src/test/BeliefBaseTest.java Modified: trunk/src/jason/bb/BeliefBase.java =================================================================== --- trunk/src/jason/bb/BeliefBase.java 2013-07-18 16:54:23 UTC (rev 1741) +++ trunk/src/jason/bb/BeliefBase.java 2013-08-15 14:15:34 UTC (rev 1742) @@ -64,6 +64,9 @@ /** Called just before the end of MAS execution */ public void stop(); + /** removes all beliefs from BB */ + public void clear(); + /** Adds a belief in the end of the BB, returns true if succeed. * The annots of l may be changed to reflect what was changed in the BB, * for example, if l is p[a,b] in a BB with p[a], l will be changed to Modified: trunk/src/jason/bb/ChainBBAdapter.java =================================================================== --- trunk/src/jason/bb/ChainBBAdapter.java 2013-07-18 16:54:23 UTC (rev 1741) +++ trunk/src/jason/bb/ChainBBAdapter.java 2013-08-15 14:15:34 UTC (rev 1742) @@ -89,6 +89,9 @@ nextBB.stop(); } + public void clear() { + nextBB.clear(); + } public boolean add(Literal l) { return nextBB.add(l); Modified: trunk/src/jason/bb/DefaultBeliefBase.java =================================================================== --- trunk/src/jason/bb/DefaultBeliefBase.java 2013-07-18 16:54:23 UTC (rev 1741) +++ trunk/src/jason/bb/DefaultBeliefBase.java 2013-08-15 14:15:34 UTC (rev 1742) @@ -74,6 +74,12 @@ public int size() { return size; } + + public void clear() { + size = 0; + percepts.clear(); + belsMap.clear(); + } public Iterator<Literal> getPercepts() { final Iterator<Literal> i = percepts.iterator(); @@ -188,13 +194,14 @@ return new Iterator<Literal>() { Iterator<Literal> il = ibe.next().list.iterator(); - + Literal l; + public boolean hasNext() { return il.hasNext(); } public Literal next() { - Literal l = il.next(); + l = il.next(); if (!il.hasNext() && ibe.hasNext()) { il = ibe.next().list.iterator(); } @@ -202,7 +209,11 @@ } public void remove() { - logger.warning("remove is not implemented for BB.iterator()."); + il.remove(); + if (l.hasAnnot(TPercept)) { + percepts.remove(l); + } + size--; } }; } else { @@ -213,10 +224,10 @@ /** @deprecated use iterator() instead of getAll */ public Iterator<Literal> getAll() { return iterator(); - } - + } public boolean abolish(PredicateIndicator pi) { + // TODO: remove also in percepts list! return belsMap.remove(pi) != null; } Modified: trunk/src/jason/bb/JDBCPersistentBB.java =================================================================== --- trunk/src/jason/bb/JDBCPersistentBB.java 2013-07-18 16:54:23 UTC (rev 1741) +++ trunk/src/jason/bb/JDBCPersistentBB.java 2013-08-15 14:15:34 UTC (rev 1742) @@ -180,6 +180,10 @@ } nextBB.stop(); } + + public void clear() { + logger.warning("clear is still not implemented for JDBC BB!"); + } /** returns true if the literal is stored in a DB */ protected boolean isDB(Literal l) { Modified: trunk/src/test/BeliefBaseTest.java =================================================================== --- trunk/src/test/BeliefBaseTest.java 2013-07-18 16:54:23 UTC (rev 1741) +++ trunk/src/test/BeliefBaseTest.java 2013-08-15 14:15:34 UTC (rev 1742) @@ -172,6 +172,19 @@ assertEquals(iteratorSize(bb.getPercepts()), 0); assertEquals(bb.size(), 1); + l2 = new LiteralImpl(true, new Pred("testRemIt")); + l2.addAnnot(new Structure("a")); + l2.addAnnot(BeliefBase.TPercept); + bb.add(l2); + Iterator<Literal> itl = bb.iterator(); + while (itl.hasNext()) { + Literal l = itl.next(); + if (l.getFunctor().startsWith("testRemIt")) { + itl.remove(); + } + } + assertEquals(iteratorSize(bb.getPercepts()), 0); + l3 = Literal.parseLiteral("pos[source(ag1)]"); assertFalse(l2.isAtom()); assertTrue(bb.remove(l3)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
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. |
From: <jom...@us...> - 2013-12-20 17:59:18
|
Revision: 1769 http://sourceforge.net/p/jason/svn/1769 Author: jomifred Date: 2013-12-20 17:59:14 +0000 (Fri, 20 Dec 2013) Log Message: ----------- remove auto source(self) from triggers in planterms Modified Paths: -------------- trunk/src/jason/asSyntax/PlanBodyImpl.java trunk/src/jason/asSyntax/Trigger.java trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc trunk/src/jason/asSyntax/parser/as2j.java trunk/src/test/ASParserTest.java Modified: trunk/src/jason/asSyntax/PlanBodyImpl.java =================================================================== --- trunk/src/jason/asSyntax/PlanBodyImpl.java 2013-12-17 18:46:59 UTC (rev 1768) +++ trunk/src/jason/asSyntax/PlanBodyImpl.java 2013-12-20 17:59:14 UTC (rev 1769) @@ -41,15 +41,24 @@ super(BODY_PLAN_FUNCTOR, 0); } + public PlanBodyImpl(boolean planTerm) { + this(); + setAsBodyTerm(planTerm); + } + public PlanBodyImpl(BodyType t, Term b) { - super(BODY_PLAN_FUNCTOR, 0); + this(t,b,false); + } + + public PlanBodyImpl(BodyType t, Term b, boolean planTerm) { + this(planTerm); formType = t; if (b != null) { srcInfo = b.getSrcInfo(); // add source(self) in some commands (it is preferred to do this at compile time than runtime) if (b instanceof Literal) { - switch (t) { + switch (formType) { case achieve: case achieveNF: case addBel: @@ -309,15 +318,15 @@ PlanBodyImpl c; if (term == null) { // (NIDE) must copy c.isTerm even if cloning empty plan c = new PlanBodyImpl(); + c.isTerm = isTerm; } else { - c = new PlanBodyImpl(formType, term.capply(u)); + c = new PlanBodyImpl(formType, term.capply(u), isTerm); if (c.term.isPlanBody()) { // we cannot have "inner" body literals c.formType = ((PlanBody)c.term).getBodyType(); c.next = ((PlanBody)c.term).getBodyNext(); c.term = ((PlanBody)c.term).getBodyTerm(); } } - c.isTerm = isTerm; if (next != null) c.add((PlanBody)next.capply(u)); @@ -331,7 +340,7 @@ if (term == null) // (NIDE) must copy c.isTerm even if cloning empty plan c = new PlanBodyImpl(); else - c = new PlanBodyImpl(formType, term.clone()); + c = new PlanBodyImpl(formType, term.clone(), isTerm); c.isTerm = isTerm; if (next != null) c.setBodyNext(getBodyNext().clonePB()); Modified: trunk/src/jason/asSyntax/Trigger.java =================================================================== --- trunk/src/jason/asSyntax/Trigger.java 2013-12-17 18:46:59 UTC (rev 1768) +++ trunk/src/jason/asSyntax/Trigger.java 2013-12-20 17:59:14 UTC (rev 1769) @@ -28,6 +28,7 @@ import jason.asSyntax.PlanBody.BodyType; import jason.asSyntax.parser.ParseException; import jason.asSyntax.parser.as2j; +import jason.bb.BeliefBase; import java.io.StringReader; import java.util.logging.Level; @@ -220,27 +221,25 @@ if (t instanceof Trigger) { return (Trigger)t; } - /*if (t instanceof VarTerm) { - VarTerm v = (VarTerm)t; - if (v.hasValue() && v.getValue() instanceof Trigger) { - return (Trigger)v.getValue(); - } - if (v.hasValue() && v.getValue() instanceof Plan) { - return ((Plan)v.getValue()).getTrigger(); - } - }*/ - if (t.isString()) { - return ASSyntax.parseTrigger(((StringTerm)t).getString()); - } if (t.isPlanBody()) { PlanBody p = (PlanBody)t; if (p.getPlanSize() == 1) { - if (p.getBodyType() == BodyType.addBel) - return new Trigger(TEOperator.add, TEType.belief, (Literal)p.getBodyTerm()); - if (p.getBodyType() == BodyType.delBel) - return new Trigger(TEOperator.del, TEType.belief, (Literal)p.getBodyTerm()); + TEOperator op = null; + if (p.getBodyType() == BodyType.addBel) + op = TEOperator.add; + else if (p.getBodyType() == BodyType.delBel) + op = TEOperator.del; + if (op != null) { + Literal l = (Literal)p.getBodyTerm().clone(); + l.delAnnot(BeliefBase.TSelf); // remove the eventual auto added annotation of source + return new Trigger(op, TEType.belief, l); + + } } } + if (t.isString()) { + return ASSyntax.parseTrigger(((StringTerm)t).getString()); + } return null; } Modified: trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc =================================================================== --- trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2013-12-17 18:46:59 UTC (rev 1768) +++ trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2013-12-20 17:59:14 UTC (rev 1769) @@ -510,10 +510,9 @@ // handle the case of "+a1; +a2", parsed as "TE; Body" if (pb && L == null) { if (T.isAddition()) - B1 = new PlanBodyImpl(BodyType.addBel, T.getLiteral()); + B1 = new PlanBodyImpl(BodyType.addBel, T.getLiteral(), true); else - B1 = new PlanBodyImpl(BodyType.delBel, T.getLiteral()); - B1.setAsBodyTerm(true); + B1 = new PlanBodyImpl(BodyType.delBel, T.getLiteral(), true); if (B != null) B1.setBodyNext(B); return B1; Modified: trunk/src/jason/asSyntax/parser/as2j.java =================================================================== --- trunk/src/jason/asSyntax/parser/as2j.java 2013-12-17 18:46:59 UTC (rev 1768) +++ trunk/src/jason/asSyntax/parser/as2j.java 2013-12-20 17:59:14 UTC (rev 1769) @@ -778,10 +778,9 @@ // handle the case of "+a1; +a2", parsed as "TE; Body" if (pb && L == null) { if (T.isAddition()) - B1 = new PlanBodyImpl(BodyType.addBel, T.getLiteral()); + B1 = new PlanBodyImpl(BodyType.addBel, T.getLiteral(), true); else - B1 = new PlanBodyImpl(BodyType.delBel, T.getLiteral()); - B1.setAsBodyTerm(true); + B1 = new PlanBodyImpl(BodyType.delBel, T.getLiteral(), true); if (B != null) B1.setBodyNext(B); {if (true) return B1;} @@ -1531,13 +1530,18 @@ return false; } + final private boolean jj_3R_66() { + if (jj_3R_78()) return true; + return false; + } + final private boolean jj_3R_85() { if (jj_3R_91()) return true; return false; } - final private boolean jj_3R_66() { - if (jj_3R_78()) return true; + final private boolean jj_3R_65() { + if (jj_3R_77()) return true; return false; } @@ -1546,8 +1550,8 @@ return false; } - final private boolean jj_3R_65() { - if (jj_3R_77()) return true; + final private boolean jj_3R_64() { + if (jj_3R_76()) return true; return false; } @@ -1556,11 +1560,6 @@ return false; } - final private boolean jj_3R_64() { - if (jj_3R_76()) return true; - return false; - } - final private boolean jj_3R_59() { Token xsp; xsp = jj_scanpos; @@ -1676,13 +1675,13 @@ return false; } - final private boolean jj_3R_82() { - if (jj_3R_80()) return true; + final private boolean jj_3R_49() { + if (jj_3R_59()) return true; return false; } - final private boolean jj_3R_49() { - if (jj_3R_59()) return true; + final private boolean jj_3R_82() { + if (jj_3R_80()) return true; return false; } @@ -1696,16 +1695,6 @@ return false; } - final private boolean jj_3R_75() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_82()) { - jj_scanpos = xsp; - if (jj_3R_83()) return true; - } - return false; - } - final private boolean jj_3R_19() { Token xsp; xsp = jj_scanpos; @@ -1722,6 +1711,16 @@ return false; } + final private boolean jj_3R_75() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_82()) { + jj_scanpos = xsp; + if (jj_3R_83()) return true; + } + return false; + } + final private boolean jj_3R_16() { if (jj_scan_token(TK_LABEL_AT)) return true; if (jj_3R_14()) return true; @@ -1835,11 +1834,6 @@ return false; } - final private boolean jj_3R_71() { - if (jj_3R_36()) return true; - return false; - } - final private boolean jj_3R_79() { Token xsp; xsp = jj_scanpos; @@ -1848,6 +1842,11 @@ return false; } + final private boolean jj_3R_71() { + if (jj_3R_36()) return true; + return false; + } + final private boolean jj_3R_70() { if (jj_3R_81()) return true; return false; @@ -2061,6 +2060,11 @@ return false; } + final private boolean jj_3R_24() { + if (jj_3R_39()) return true; + return false; + } + final private boolean jj_3R_14() { Token xsp; xsp = jj_scanpos; @@ -2082,11 +2086,6 @@ return false; } - final private boolean jj_3R_24() { - if (jj_3R_39()) return true; - return false; - } - final private boolean jj_3R_23() { if (jj_3R_38()) return true; return false; @@ -2097,11 +2096,6 @@ return false; } - final private boolean jj_3R_46() { - if (jj_scan_token(TK_FALSE)) return true; - return false; - } - final private boolean jj_3R_15() { Token xsp; while (true) { @@ -2124,6 +2118,11 @@ return false; } + final private boolean jj_3R_46() { + if (jj_scan_token(TK_FALSE)) return true; + return false; + } + final private boolean jj_3R_45() { if (jj_scan_token(TK_TRUE)) return true; return false; Modified: trunk/src/test/ASParserTest.java =================================================================== --- trunk/src/test/ASParserTest.java 2013-12-17 18:46:59 UTC (rev 1768) +++ trunk/src/test/ASParserTest.java 2013-12-20 17:59:14 UTC (rev 1769) @@ -251,7 +251,7 @@ Unifier un = new Unifier(); Term t = ASSyntax.parseTerm("{ +a(10) }"); assertTrue(t.isPlanBody()); - assertEquals("{ +a(10)[source(self)] }", t.toString()); + assertEquals("{ +a(10)[source(self)] }", t.toString()); // plan terms should not have default annotations t = ASSyntax.parseTerm("{ @label(a,b,10,test,long,label) +a(10) }"); assertTrue(t instanceof Plan); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |