|
From: <jom...@us...> - 2008-06-24 16:19:18
|
Revision: 1344
http://jason.svn.sourceforge.net/jason/?rev=1344&view=rev
Author: jomifred
Date: 2008-06-24 09:19:11 -0700 (Tue, 24 Jun 2008)
Log Message:
-----------
add order in the unnamed vars based on their ids.
Modified Paths:
--------------
trunk/release-notes.txt
trunk/src/jason/asSyntax/UnnamedVar.java
trunk/src/test/VarTermTest.java
Modified: trunk/release-notes.txt
===================================================================
--- trunk/release-notes.txt 2008-06-24 15:20:36 UTC (rev 1343)
+++ trunk/release-notes.txt 2008-06-24 16:19:11 UTC (rev 1344)
@@ -65,6 +65,7 @@
when annotations are used
. print works like println
. =.. with atoms
+. unbound vars as arguments for rules (as identified by Stephen Cranefield)
-------------
Modified: trunk/src/jason/asSyntax/UnnamedVar.java
===================================================================
--- trunk/src/jason/asSyntax/UnnamedVar.java 2008-06-24 15:20:36 UTC (rev 1343)
+++ trunk/src/jason/asSyntax/UnnamedVar.java 2008-06-24 16:19:11 UTC (rev 1344)
@@ -33,17 +33,21 @@
private static final long serialVersionUID = 1L;
private static int varCont = 1;
-
+ private int myId;
+
public UnnamedVar() {
- super(createNewName());
+ super("_" + (varCont++));
+ myId = varCont;
}
public UnnamedVar(String name) {
super( name.length() == 1 ? "_" + (varCont++) : name);
+ myId = varCont;
}
-
- public static String createNewName() {
- return "_" + (varCont++);
+
+ public UnnamedVar(int id) {
+ super("_" + id);
+ myId = id;
}
public Object clone() {
@@ -51,11 +55,27 @@
return getValue().clone();
} else {
UnnamedVar newv = new UnnamedVar(getFunctor());
+ newv.myId = this.myId;
if (hasAnnot())
newv.addAnnots((ListTerm)this.getAnnots().clone());
return newv;
}
}
+
+ public int compareTo(Term t) {
+ if (hasValue()) {
+ return super.compareTo(t);
+ } else if (t instanceof UnnamedVar) {
+ if (myId > ((UnnamedVar)t).myId)
+ return 1;
+ else if (myId < ((UnnamedVar)t).myId)
+ return -1;
+ else
+ return 0;
+ } else {
+ return super.compareTo(t);
+ }
+ }
@Override
public boolean isUnnamedVar() {
Modified: trunk/src/test/VarTermTest.java
===================================================================
--- trunk/src/test/VarTermTest.java 2008-06-24 15:20:36 UTC (rev 1343)
+++ trunk/src/test/VarTermTest.java 2008-06-24 16:19:11 UTC (rev 1344)
@@ -15,6 +15,7 @@
import jason.asSyntax.Pred;
import jason.asSyntax.Structure;
import jason.asSyntax.Term;
+import jason.asSyntax.UnnamedVar;
import jason.asSyntax.VarTerm;
import jason.asSyntax.ArithExpr.ArithmeticOp;
import jason.asSyntax.parser.SimpleCharStream;
@@ -23,8 +24,11 @@
import jason.infra.centralised.CentralisedAgArch;
import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import junit.framework.TestCase;
@@ -484,5 +488,16 @@
x.apply(u);
assertEquals(x.toString(), "10");
- }
+ }
+
+ public void testUnnamedvarsorder() {
+ // the order is important for the "return" of plans/rules (where makeVarAnnon is used)
+ // the most recently created unnamed vars should come first
+ List<UnnamedVar> l = new ArrayList<UnnamedVar>();
+ l.add(new UnnamedVar(5));
+ l.add(new UnnamedVar(6));
+ l.add(new UnnamedVar(11));
+ Collections.sort(l);
+ assertEquals("[_5, _6, _11]", l.toString());
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|