|
From: <jom...@us...> - 2008-06-24 13:15:08
|
Revision: 1342
http://jason.svn.sourceforge.net/jason/?rev=1342&view=rev
Author: jomifred
Date: 2008-06-24 06:15:06 -0700 (Tue, 24 Jun 2008)
Log Message:
-----------
fix bug in =..
start fixing the bug reported by Sthepen
Modified Paths:
--------------
trunk/applications/as-unit-test/src/jason/tests/TestAll.java
trunk/release-notes.txt
trunk/src/jason/asSemantics/TransitionSystem.java
trunk/src/jason/asSemantics/Unifier.java
trunk/src/jason/asSyntax/Atom.java
trunk/src/jason/asSyntax/ListTermImpl.java
trunk/src/jason/asSyntax/Literal.java
trunk/src/jason/asSyntax/Structure.java
trunk/src/jason/asSyntax/UnnamedVar.java
trunk/src/jason/asSyntax/VarTerm.java
trunk/src/jason/environment/Environment.java
trunk/src/test/VarTermTest.java
Added Paths:
-----------
trunk/applications/as-unit-test/src/jason/tests/BugVarsAsArg.java
Added: trunk/applications/as-unit-test/src/jason/tests/BugVarsAsArg.java
===================================================================
--- trunk/applications/as-unit-test/src/jason/tests/BugVarsAsArg.java (rev 0)
+++ trunk/applications/as-unit-test/src/jason/tests/BugVarsAsArg.java 2008-06-24 13:15:06 UTC (rev 1342)
@@ -0,0 +1,39 @@
+package jason.tests;
+
+import jason.asunit.TestAgent;
+
+import org.junit.Before;
+import org.junit.Test;
+
+/** based on bug found by Stephen Cranefield -- see jason list */
+public class BugVarsAsArg {
+
+ TestAgent ag;
+
+ // initialisation of the agent test
+ @Before
+ public void setupAg() {
+ ag = new TestAgent();
+
+ // defines the agent's AgentSpeak code
+ ag.parseAScode(
+ "test_rule(A,a(A)). "+
+ "ml0(L,L). "+
+ "ml(V1,V2,R) :- ml0([V1,V2],R). "+
+ "+!test1 <- ?test_rule(T,A); A = a(V); T=45; jason.asunit.print(V). "+
+ "+!test2 <- ?ml(A,B,L); A=1; B=2; jason.asunit.print(L). "
+ );
+ }
+
+ @Test
+ public void testRule1() {
+ ag.addGoal("test1");
+ ag.assertPrint("45", 5);
+ }
+
+ @Test
+ public void testRule2() {
+ ag.addGoal("test2");
+ ag.assertPrint("[1,2]", 5);
+ }
+}
Modified: trunk/applications/as-unit-test/src/jason/tests/TestAll.java
===================================================================
--- trunk/applications/as-unit-test/src/jason/tests/TestAll.java 2008-06-14 20:29:35 UTC (rev 1341)
+++ trunk/applications/as-unit-test/src/jason/tests/TestAll.java 2008-06-24 13:15:06 UTC (rev 1342)
@@ -8,6 +8,7 @@
@SuiteClasses({
BugListReturnUnification.class,
BugVarsInInitBels.class,
+ BugVarsAsArg.class,
TestAddLogExprInBB.class,
TestGoalSource.class,
TestIF.class,
Modified: trunk/release-notes.txt
===================================================================
--- trunk/release-notes.txt 2008-06-14 20:29:35 UTC (rev 1341)
+++ trunk/release-notes.txt 2008-06-24 13:15:06 UTC (rev 1342)
@@ -64,6 +64,7 @@
. drop_desire does not remove desires in Circumstance.Event correctly
when annotations are used
. print works like println
+. =.. with atoms
-------------
Modified: trunk/src/jason/asSemantics/TransitionSystem.java
===================================================================
--- trunk/src/jason/asSemantics/TransitionSystem.java 2008-06-14 20:29:35 UTC (rev 1341)
+++ trunk/src/jason/asSemantics/TransitionSystem.java 2008-06-24 13:15:06 UTC (rev 1342)
@@ -658,6 +658,7 @@
// they are anonymous)
Literal tel = topIM.getPlan().getTrigger().getLiteral();
tel.apply(topIM.unif);
+ tel.makeVarsAnnon();
im.unif.unifies(tel, g);
}
}
Modified: trunk/src/jason/asSemantics/Unifier.java
===================================================================
--- trunk/src/jason/asSemantics/Unifier.java 2008-06-14 20:29:35 UTC (rev 1341)
+++ trunk/src/jason/asSemantics/Unifier.java 2008-06-24 13:15:06 UTC (rev 1342)
@@ -207,9 +207,9 @@
return unifiesNoUndo(t1gv, t2vl);
}
- // both are var (not unnamedvar) with no value, like X=Y
+ // both are var with no value, like X=Y
// we must ensure that these vars will form a cluster
- if (! t1gv.isUnnamedVar() && ! t2gv.isUnnamedVar()) {
+ //if (! t1gv.isUnnamedVar() && ! t2gv.isUnnamedVar()) {
VarTerm t1c = (VarTerm) t1gv.clone();
VarTerm t2c = (VarTerm) t2gv.clone();
VarsCluster cluster = new VarsCluster(t1c, t2c, this);
@@ -219,7 +219,7 @@
function.put(vtc, cluster);
}
}
- }
+ //}
return true;
}
Modified: trunk/src/jason/asSyntax/Atom.java
===================================================================
--- trunk/src/jason/asSyntax/Atom.java 2008-06-14 20:29:35 UTC (rev 1341)
+++ trunk/src/jason/asSyntax/Atom.java 2008-06-24 13:15:06 UTC (rev 1342)
@@ -115,6 +115,11 @@
}
@Override
+ public List<Term> getTerms() {
+ return emptyTermList;
+ }
+
+ @Override
public Term[] getTermsArray() {
return emptyTermArray;
}
Modified: trunk/src/jason/asSyntax/ListTermImpl.java
===================================================================
--- trunk/src/jason/asSyntax/ListTermImpl.java 2008-06-14 20:29:35 UTC (rev 1341)
+++ trunk/src/jason/asSyntax/ListTermImpl.java 2008-06-24 13:15:06 UTC (rev 1342)
@@ -436,6 +436,7 @@
@SuppressWarnings("unchecked")
public boolean addAll(Collection c) {
+ if (c == null) return false;
ListTerm lt = this; // where to add
Iterator i = c.iterator();
while (i.hasNext()) {
Modified: trunk/src/jason/asSyntax/Literal.java
===================================================================
--- trunk/src/jason/asSyntax/Literal.java 2008-06-14 20:29:35 UTC (rev 1341)
+++ trunk/src/jason/asSyntax/Literal.java 2008-06-24 13:15:06 UTC (rev 1342)
@@ -165,6 +165,7 @@
Unifier ruleUn = ruleIt.next(); // evaluation result
Literal rhead = rule.headClone();
rhead.apply(ruleUn);
+ rhead.makeVarsAnnon();
Unifier unC = un.copy();
if (unC.unifiesNoUndo(Literal.this, rhead)) {
Modified: trunk/src/jason/asSyntax/Structure.java
===================================================================
--- trunk/src/jason/asSyntax/Structure.java 2008-06-14 20:29:35 UTC (rev 1341)
+++ trunk/src/jason/asSyntax/Structure.java 2008-06-24 13:15:06 UTC (rev 1342)
@@ -48,7 +48,9 @@
private static final long serialVersionUID = 1L;
private static Logger logger = Logger.getLogger(Structure.class.getName());
- protected static final Term[] emptyTermArray = new Term[0]; // just to have a type for toArray in the getTermsArray method
+
+ protected static final List<Term> emptyTermList = new ArrayList<Term>(0);
+ protected static final Term[] emptyTermArray = new Term[0]; // just to have a type for toArray in the getTermsArray method
private final String functor; // immutable field
Modified: trunk/src/jason/asSyntax/UnnamedVar.java
===================================================================
--- trunk/src/jason/asSyntax/UnnamedVar.java 2008-06-14 20:29:35 UTC (rev 1341)
+++ trunk/src/jason/asSyntax/UnnamedVar.java 2008-06-24 13:15:06 UTC (rev 1342)
@@ -35,12 +35,16 @@
private static int varCont = 1;
public UnnamedVar() {
- super("_" + (varCont++));
+ super(createNewName());
}
public UnnamedVar(String name) {
super( name.length() == 1 ? "_" + (varCont++) : name);
}
+
+ public static String createNewName() {
+ return "_" + (varCont++);
+ }
public Object clone() {
if (hasValue()) {
Modified: trunk/src/jason/asSyntax/VarTerm.java
===================================================================
--- trunk/src/jason/asSyntax/VarTerm.java 2008-06-14 20:29:35 UTC (rev 1341)
+++ trunk/src/jason/asSyntax/VarTerm.java 2008-06-24 13:15:06 UTC (rev 1342)
@@ -53,6 +53,8 @@
private Term value = null;
+ private String unnamedId = null; // set when transformed in unnamed var
+
public VarTerm(String s) {
super(s);
if (s != null && Character.isLowerCase(s.charAt(0))) {
@@ -79,6 +81,7 @@
// do not call constructor with term parameter!
VarTerm t = new VarTerm(super.getFunctor());
t.setSrc(this);
+ t.unnamedId = this.unnamedId;
if (hasAnnot())
t.setAnnots((ListTerm) getAnnots().clone());
return t;
@@ -91,8 +94,21 @@
}
public boolean isUnnamedVar() {
- return false;
+ return unnamedId != null;
}
+
+ /** change the functor of the var to _ */
+ public void setUnnamed() {
+ unnamedId = UnnamedVar.createNewName();
+ }
+ public void setUnnamed(String id) {
+ unnamedId = id;
+ }
+
+ /** undo the setUnanamed() */
+ public void setNamed() {
+ unnamedId = null;
+ }
@Override
public boolean isGround() {
@@ -192,7 +208,10 @@
@Override
public String getFunctor() {
if (value == null) {
- return super.getFunctor();
+ if (unnamedId != null)
+ return unnamedId;
+ else
+ return super.getFunctor();
} else if (value.isStructure()) {
return ((Structure)getValue()).getFunctor();
} else {
Modified: trunk/src/jason/environment/Environment.java
===================================================================
--- trunk/src/jason/environment/Environment.java 2008-06-14 20:29:35 UTC (rev 1341)
+++ trunk/src/jason/environment/Environment.java 2008-06-24 13:15:06 UTC (rev 1342)
@@ -324,6 +324,7 @@
* Execute an action on the environment. This method is probably overridden in the user environment class.
*/
public boolean executeAction(String agName, Structure act) {
+ logger.info("The action "+act+" done by "+agName+" is not implemented in the default environment.");
return true;
}
}
Modified: trunk/src/test/VarTermTest.java
===================================================================
--- trunk/src/test/VarTermTest.java 2008-06-14 20:29:35 UTC (rev 1341)
+++ trunk/src/test/VarTermTest.java 2008-06-24 13:15:06 UTC (rev 1342)
@@ -485,4 +485,14 @@
x.apply(u);
assertEquals(x.toString(), "10");
}
+
+ public void testTransformUnnamed() {
+ VarTerm x = new VarTerm("X");
+ assertFalse(x.isUnnamedVar());
+ x.setUnnamed();
+ assertTrue(x.isUnnamedVar());
+ assertFalse("X".equals(x.toString()));
+ x.setNamed();
+ assertTrue("X".equals(x.toString()));
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|