|
From: <jom...@us...> - 2015-12-11 13:05:54
|
Revision: 1867
http://sourceforge.net/p/jason/svn/1867
Author: jomifred
Date: 2015-12-11 13:05:52 +0000 (Fri, 11 Dec 2015)
Log Message:
-----------
revise unifier for namespaces/negated vars
Modified Paths:
--------------
trunk/build.xml
trunk/doc/index.html
trunk/src/jason/asSemantics/Unifier.java
trunk/src/jason/asSyntax/ASSyntax.java
trunk/src/jason/asSyntax/Literal.java
trunk/src/jason/asSyntax/LiteralImpl.java
trunk/src/jason/asSyntax/Pred.java
trunk/src/jason/asSyntax/Structure.java
trunk/src/jason/asSyntax/VarTerm.java
trunk/src/jason/bb/ChainBB.java
trunk/src/jason/bb/DefaultBeliefBase.java
trunk/src/jason/stdlib/package.html
trunk/src/test/ASParserTest.java
trunk/src/test/BeliefBaseTest.java
trunk/src/test/NSTest.java
trunk/src/test/VarTermTest.java
Added Paths:
-----------
trunk/src/jason/bb/StructureWrapperForLiteral.java
Modified: trunk/build.xml
===================================================================
--- trunk/build.xml 2015-12-11 11:01:07 UTC (rev 1866)
+++ trunk/build.xml 2015-12-11 13:05:52 UTC (rev 1867)
@@ -13,7 +13,7 @@
<property name="dist.properties" value="${basedir}/bin/dist.properties" />
<property name="version" value="1" />
- <property name="release" value="4.2" />
+ <property name="release" value="2.beta" />
<property name="distDir" value="${env.HOME}/tmp/x/Jason-${version}.${release}" />
<property name="distFile" value="${env.HOME}/Jason-${version}.${release}" />
Modified: trunk/doc/index.html
===================================================================
--- trunk/doc/index.html 2015-12-11 11:01:07 UTC (rev 1866)
+++ trunk/doc/index.html 2015-12-11 13:05:52 UTC (rev 1867)
@@ -17,7 +17,7 @@
<li><a href="faq.html">FAQ</a> (html)</li><br/>
-<li><a href="api/jason/stdlib/package-summary.html#package_description">Stantard internal actions</a> (html)</li>
+<li><a href="api/jason/stdlib/package-summary.html#package.description">Stantard internal actions</a> (html)</li>
<li><a href="api/jason/functions/package-summary.html">Stantard arithmetic functions</a> (html)</li>
<li>API of all classes: generated by <a href="api/index.html">JavaDoc</a>.</li><br>
Modified: trunk/src/jason/asSemantics/Unifier.java
===================================================================
--- trunk/src/jason/asSemantics/Unifier.java 2015-12-11 11:01:07 UTC (rev 1866)
+++ trunk/src/jason/asSemantics/Unifier.java 2015-12-11 13:05:52 UTC (rev 1867)
@@ -76,6 +76,7 @@
if (vl != null && vl.isVar()) { // optimised deref
return get((VarTerm)vl);
}
+ /* vars in unifier are not negated anymore! (works like namespace)
if (vl == null) { // try negated value of the var
//System.out.println("for "+vtp+" try "+new VarTerm(vtp.negated(), vtp.getFunctor())+" in "+this);
vl = function.get( new VarTerm(vtp.negated(), vtp.getFunctor()) );
@@ -88,6 +89,7 @@
((Literal)vl).setNegated(((Literal)vl).negated());
}
}
+ */
return vl;
}
@@ -209,11 +211,6 @@
}
}
- /*if (t1g.isCyclicTerm())
- remove(t1g.getCyclicVar());
- if (t2g.isCyclicTerm())
- remove(t2g.getCyclicVar());
- */
return ok;
}
@@ -229,22 +226,18 @@
final boolean t1gisvar = t1g.isVar();
final boolean t2gisvar = t2g.isVar();
-
+
// one of the args is a var
if (t1gisvar || t2gisvar) {
+ final VarTerm t1gv = t1gisvar ? (VarTerm)t1g : null;
+ final VarTerm t2gv = t2gisvar ? (VarTerm)t2g : null;
- // deref vars
- final VarTerm t1gv = t1gisvar ? deref((VarTerm)t1g) : null;
- final VarTerm t2gv = t2gisvar ? deref((VarTerm)t2g) : null;
-
// get their values
- //final Term t1vl = t1gisvar ? function.get(t1gv) : t1g;
- //final Term t2vl = t2gisvar ? function.get(t2gv) : t2g;
final Term t1vl = t1gisvar ? get(t1gv) : t1g;
final Term t2vl = t2gisvar ? get(t2gv) : t2g;
-
+
if (t1vl != null && t2vl != null) { // unifies the two values of the vars
- return unifiesNoUndo(t1vl, t2vl);
+ return unifiesNoUndo(t1vl, t2vl);
} else if (t1vl != null) { // unifies var with value
return bind(t2gv, t1vl);
} else if (t2vl != null) {
@@ -329,35 +322,32 @@
if (! vt1.getNS().equals(vt2.getNS()))
return false;
- if (vt1.negated() && vt2.negated()) { // in the case of ~A = ~B, put A=B in the unifier
- vt1 = new VarTerm(vt1.getFunctor());
- vt2 = new VarTerm(vt2.getFunctor());
+ if (vt1.negated() != vt2.negated()) {
+ return false;
}
+
+ vt1 = getVarForUnifier(vt1);
+ vt2 = getVarForUnifier(vt2);
final int comp = vt1.compareTo(vt2);
+ //System.out.println(vt1+"="+vt2+" ==> "+getVarForUnifier(vt1) +"="+ getVarForUnifier(vt2)+" in "+this+" cmp="+comp);
if (comp < 0) {
- function.put((VarTerm)vt1.clone(), vt2.clone());
+ function.put(vt1, vt2);
} else if (comp > 0){
- function.put((VarTerm)vt2.clone(), vt1.clone());
+ function.put(vt2, vt1);
} // if they are the same (comp == 0), do not bind
return true;
}
public boolean bind(VarTerm vt, Term vl) {
if (vt.negated()) { // negated vars unifies only with negated literals
- if (vl.isLiteral()) {
- if (!((Literal)vl).negated()) {
- return false;
- } else {
- // put also the positive case in the unifier
- Literal vlp = (Literal)vl.clone();
- vlp.setNegated(Literal.LPos);
- unifies(new VarTerm(vt.getFunctor()), vlp);
- }
- } else {
+ if (!vl.isLiteral() || !((Literal)vl).negated()) {
return false;
- }
+ }
+ vl = (Literal)vl.clone();
+ ((Literal)vl).setNegated(Literal.LPos);
}
+ // namespace
if (vl.isLiteral()) {
Literal lvl = (Literal)vl;
if (! unifiesNamespace(vt, lvl) )
@@ -370,9 +360,15 @@
vl = new CyclicTerm((Literal)vl, (VarTerm)vt.clone());
}
- function.put((VarTerm) vt.cloneNS(Literal.DefaultNS), vl);
+ function.put(getVarForUnifier(vt), vl);
return true;
}
+
+ private VarTerm getVarForUnifier(VarTerm v) {
+ v = (VarTerm)deref(v).cloneNS(Literal.DefaultNS);
+ v.setNegated(Literal.LPos);
+ return v;
+ }
public void clear() {
function.clear();
Modified: trunk/src/jason/asSyntax/ASSyntax.java
===================================================================
--- trunk/src/jason/asSyntax/ASSyntax.java 2015-12-11 11:01:07 UTC (rev 1866)
+++ trunk/src/jason/asSyntax/ASSyntax.java 2015-12-11 13:05:52 UTC (rev 1867)
@@ -66,6 +66,8 @@
static {
keywords.add(new PredicateIndicator("atomic", 0));
+ keywords.add(new PredicateIndicator("breakpoint", 0));
+ keywords.add(new PredicateIndicator("all_unifs", 0));
keywords.add(new PredicateIndicator("default", 0));
keywords.add(new PredicateIndicator("source", 0));
@@ -76,15 +78,15 @@
keywords.add(new PredicateIndicator("untell", 0));
keywords.add(new PredicateIndicator("achieve", 0));
keywords.add(new PredicateIndicator("unachieve", 0));
- keywords.add(new PredicateIndicator("ask", 0));
keywords.add(new PredicateIndicator("askOne", 0));
keywords.add(new PredicateIndicator("askAll", 0));
keywords.add(new PredicateIndicator("askHow", 0));
keywords.add(new PredicateIndicator("tellHow", 0));
+ keywords.add(new PredicateIndicator("untellHow", 0));
}
- public void addKeyword(PredicateIndicator pi) {
+ public static void addKeyword(PredicateIndicator pi) {
keywords.add(pi);
}
@@ -149,6 +151,13 @@
return new VarTerm(functor);
}
+ /** creates a new variable term (possibly negated) */
+ public static VarTerm createVar(boolean negated, String functor) {
+ VarTerm v = new VarTerm(functor);
+ v.setNegated(negated);
+ return v;
+ }
+
/** creates a new anonymous (or unnamed) variable */
public static VarTerm createVar() {
return new UnnamedVar();
Modified: trunk/src/jason/asSyntax/Literal.java
===================================================================
--- trunk/src/jason/asSyntax/Literal.java 2015-12-11 11:01:07 UTC (rev 1866)
+++ trunk/src/jason/asSyntax/Literal.java 2015-12-11 13:05:52 UTC (rev 1867)
@@ -124,7 +124,12 @@
/** returns all terms of this literal */
public List<Term> getTerms() { return Structure.emptyTermList; }
/** returns all terms of this literal as an array */
- public Term[] getTermsArray() { return getTerms().toArray(Structure.emptyTermArray); }
+ public Term[] getTermsArray() {
+ if (hasTerm())
+ return getTerms().toArray(Structure.emptyTermArray);
+ else
+ return Structure.emptyTermArray;
+ }
private static final List<VarTerm> emptyListVar = new ArrayList<VarTerm>();
/** returns all singleton vars (that appears once) in this literal */
@@ -507,7 +512,7 @@
tfunctor = ASSyntax.parseTerm( ((StringTerm)tfunctor).getString() );
}
- Literal l = new LiteralImpl(ns, pos,((Atom)tfunctor).getFunctor(),5);
+ Literal l = new LiteralImpl(ns, pos,((Atom)tfunctor).getFunctor());
if (i.hasNext()) {
l.setTerms(((ListTerm)i.next()).cloneLT());
Modified: trunk/src/jason/asSyntax/LiteralImpl.java
===================================================================
--- trunk/src/jason/asSyntax/LiteralImpl.java 2015-12-11 11:01:07 UTC (rev 1866)
+++ trunk/src/jason/asSyntax/LiteralImpl.java 2015-12-11 13:05:52 UTC (rev 1867)
@@ -50,12 +50,6 @@
type = pos;
}
- /** if pos == true, the literal is positive, otherwise it is negative */
- public LiteralImpl(Atom namespace, boolean pos, String functor, int nbTerms) {
- super(namespace, functor, nbTerms);
- type = pos;
- }
-
public LiteralImpl(Literal l) {
super(l);
type = !l.negated();
@@ -74,16 +68,18 @@
type = pos;
}
+ /** if pos == true, the literal is positive, otherwise it is negative */
+ public LiteralImpl(Atom namespace, boolean pos, String functor) {
+ super(namespace, functor);
+ type = pos;
+ }
+
/** creates a literal based on another but in another name space and signal */
public LiteralImpl(Atom namespace, boolean pos, Literal l) {
super(namespace, l);
type = pos;
}
- protected LiteralImpl(String functor, int terms) {
- super(functor, terms);
- }
-
@Override
public boolean isAtom() {
return super.isAtom() && !negated();
Modified: trunk/src/jason/asSyntax/Pred.java
===================================================================
--- trunk/src/jason/asSyntax/Pred.java 2015-12-11 11:01:07 UTC (rev 1866)
+++ trunk/src/jason/asSyntax/Pred.java 2015-12-11 13:05:52 UTC (rev 1867)
@@ -50,14 +50,14 @@
super(functor);
}
- public Pred(Atom namespace, String functor, int nbTerms) {
- super(namespace, functor, nbTerms);
- }
-
public Pred(Literal l) {
this(l.getNS(), l);
}
+ public Pred(Atom namespace, String functor) {
+ super(namespace, functor);
+ }
+
public Pred(Atom namespace, Literal l) {
super(namespace, l);
Modified: trunk/src/jason/asSyntax/Structure.java
===================================================================
--- trunk/src/jason/asSyntax/Structure.java 2015-12-11 11:01:07 UTC (rev 1866)
+++ trunk/src/jason/asSyntax/Structure.java 2015-12-11 13:05:52 UTC (rev 1867)
@@ -59,28 +59,27 @@
public Structure(String functor) {
//this.functor = (functor == null ? null : functor.intern()); // it does not improve performance in test i did!
- super(functor);
- this.terms = new ArrayList<Term>(5);
+ this(DefaultNS, functor);
}
- public Structure(Atom namespace, String functor, int nbTerms) {
- //this.functor = (functor == null ? null : functor.intern()); // it does not improve performance in test i did!
- super(namespace, functor);
- if (nbTerms > 0)
- this.terms = new ArrayList<Term>(5);
- }
-
-
public Structure(Literal l) {
this(l.getNS(), l);
}
+
+ public Structure(Atom namespace, String functor) {
+ //this.functor = (functor == null ? null : functor.intern()); // it does not improve performance in test i did!
+ super(namespace, functor);
+ }
+
public Structure(Atom namespace, Literal l) {
super(namespace, l);
final int tss = l.getArity();
- terms = new ArrayList<Term>(tss);
- for (int i = 0; i < tss; i++)
- terms.add(l.getTerm(i).clone());
+ if (tss > 0) {
+ terms = new ArrayList<Term>(tss);
+ for (int i = 0; i < tss; i++)
+ terms.add(l.getTerm(i).clone());
+ }
//isGround = null;
}
@@ -88,9 +87,11 @@
protected Structure(Literal l, Unifier u) {
super(l, u);
final int tss = l.getArity();
- terms = new ArrayList<Term>(tss);
- for (int i = 0; i < tss; i++)
- terms.add(l.getTerm(i).capply(u));
+ if (tss > 0) {
+ terms = new ArrayList<Term>(tss);
+ for (int i = 0; i < tss; i++)
+ terms.add(l.getTerm(i).capply(u));
+ }
resetHashCodeCache();
//isGround = null;
}
@@ -217,6 +218,7 @@
@Override
public void addTerm(Term t) {
if (t == null) return;
+ if (terms == null) terms = new ArrayList<Term>(5);
terms.add(t);
//if (!t.isGround())
// isGround = false;
@@ -226,6 +228,7 @@
@Override
public void delTerm(int index) {
+ if (terms == null) return;
terms.remove(index);
predicateIndicatorCache = null;
resetHashCodeCache();
@@ -234,8 +237,8 @@
@Override
public Literal addTerms(Term ... ts ) {
+ if (terms == null) terms = new ArrayList<Term>(5);
for (Term t: ts)
- //addTerm(t);
terms.add(t);
predicateIndicatorCache = null;
resetHashCodeCache();
@@ -244,8 +247,8 @@
@Override
public Literal addTerms(List<Term> l) {
+ if (terms == null) terms = new ArrayList<Term>(5);
for (Term t: l)
- //addTerm(t);
terms.add(t);
predicateIndicatorCache = null;
resetHashCodeCache();
@@ -263,6 +266,7 @@
@Override
public void setTerm(int i, Term t) {
+ if (terms == null) terms = new ArrayList<Term>(5);
terms.set(i,t);
resetHashCodeCache();
//if (!t.isGround() && isGround())
@@ -270,7 +274,10 @@
}
public Term getTerm(int i) {
- return terms.get(i);
+ if (terms == null)
+ return null;
+ else
+ return terms.get(i);
}
@Override
Modified: trunk/src/jason/asSyntax/VarTerm.java
===================================================================
--- trunk/src/jason/asSyntax/VarTerm.java 2015-12-11 11:01:07 UTC (rev 1866)
+++ trunk/src/jason/asSyntax/VarTerm.java 2015-12-11 13:05:52 UTC (rev 1867)
@@ -66,12 +66,9 @@
e.printStackTrace();
}
}
- public VarTerm(boolean negated, String functor) {
- super(negated, functor);
- }
public VarTerm(Atom namespace, String functor) {
- super(namespace, LPos, functor, 0);
+ super(namespace, LPos, functor);
}
public VarTerm(Atom namespace, Literal v) {
@@ -90,14 +87,6 @@
}
@Override
- protected int calcHashCode() {
- int result = getFunctor().hashCode();
- if (negated()) result += 3271;
- // Do not consider NS!
- return result;
- }
-
- @Override
public Term capply(Unifier u) {
if (u != null) {
Term vl = u.get(this);
@@ -119,10 +108,17 @@
vl = vl.capply(u); // should clone here, since there is no cloning in unify
- if (getNS() != Literal.DefaultNS && vl.isLiteral()) {
- // use var ns for the value ns
- vl = ((Literal)vl).cloneNS( (Atom)getNS().capply(u) ); // this var ns could be a var, so capply
+ if (vl.isLiteral()) {
+ if (getNS() != Literal.DefaultNS) {
+ // TODO: change capply to has the new namespace as parameter and them remove this code
+ // use var ns for the value ns
+ vl = ((Literal)vl).cloneNS( (Atom)getNS().capply(u) ); // this var ns could be a var, so capply
+ }
+ if (negated()) {
+ ((Literal)vl).setNegated(Literal.LNeg);
+ }
}
+
// decide whether to use var annots in apply
// X = p[a]
@@ -143,15 +139,7 @@
}
public Term clone() {
- // do not call constructor with term parameter!
- //VarTerm t = new VarTerm(super.getFunctor());
- //t.setNegated(!negated());
- VarTerm t = new VarTerm(this.getNS(), this);
- //t.srcInfo = this.srcInfo;
- //t.hashCodeCache = this.hashCodeCache;
- //if (hasAnnot())
- // t.setAnnots(getAnnots().cloneLT());
- return t;
+ return new VarTerm(this.getNS(), this);
}
@Override
@@ -177,6 +165,10 @@
return false;
}
+ // DO NOT consider ns in equals and hashcode!
+ // idem for negated
+ // in the unifier, the vars have no ns neither negation
+
@Override
public boolean equals(Object t) {
if (t == null) return false;
@@ -184,19 +176,28 @@
// is t also a var? (its value must also be null)
if (t instanceof VarTerm) {
final VarTerm tAsVT = (VarTerm) t;
- // DO NOT consider ns in equals of hashcode!
- return negated() == tAsVT.negated() && getFunctor().equals(tAsVT.getFunctor()); // && getNS().equals(tAsVT.getNS());
+ return //negated() == tAsVT.negated() &&
+ getFunctor().equals(tAsVT.getFunctor()); // && getNS().equals(tAsVT.getNS());
}
return false;
}
+
+ @Override
+ protected int calcHashCode() {
+ int result = getFunctor().hashCode();
+ //if (negated()) result += 3271; // TODO: review
+ // Do not consider NS and negated! (in unifier, A = ~A)
+ return result;
+ }
+
public int compareTo(Term t) {
if (t == null || t.isUnnamedVar())
return -1;
else if (t.isVar()) {
- if (!negated() && ((VarTerm)t).negated())
- return -1;
- else
+ //if (!negated() && ((VarTerm)t).negated())
+ // return -1;
+ //else
return getFunctor().compareTo(((VarTerm)t).getFunctor());
} else {
return 1;
Modified: trunk/src/jason/bb/ChainBB.java
===================================================================
--- trunk/src/jason/bb/ChainBB.java 2015-12-11 11:01:07 UTC (rev 1866)
+++ trunk/src/jason/bb/ChainBB.java 2015-12-11 13:05:52 UTC (rev 1867)
@@ -52,8 +52,10 @@
Structure bbs = Structure.parse(s);
String[] bbargs = new String[bbs.getArity()];
int i = 0;
- for (Term t: bbs.getTerms()) {
- bbargs[i++] = t.isString() ? ((StringTerm)t).getString(): t.toString();
+ if (bbs.hasTerm()) {
+ for (Term t: bbs.getTerms()) {
+ bbargs[i++] = t.isString() ? ((StringTerm)t).getString(): t.toString();
+ }
}
bb.init(ag, bbargs);
bb = bb.getNextAdapter();
Modified: trunk/src/jason/bb/DefaultBeliefBase.java
===================================================================
--- trunk/src/jason/bb/DefaultBeliefBase.java 2015-12-11 11:01:07 UTC (rev 1866)
+++ trunk/src/jason/bb/DefaultBeliefBase.java 2015-12-11 13:05:52 UTC (rev 1867)
@@ -372,10 +372,10 @@
final class BelEntry {
final private Deque<Literal> list = new LinkedBlockingDeque<Literal>(); // maintains the order of the beliefs
- final private Map<LiteralWrapper,Literal> map = new ConcurrentHashMap<LiteralWrapper,Literal>(); // to find content faster
+ final private Map<StructureWrapperForLiteral,Literal> map = new ConcurrentHashMap<StructureWrapperForLiteral,Literal>(); // to find content faster
public void add(Literal l, boolean addInEnd) {
- map.put(new LiteralWrapper(l), l);
+ map.put(new StructureWrapperForLiteral(l), l);
if (addInEnd) {
list.addLast(l);
} else {
@@ -384,7 +384,7 @@
}
public void remove(Literal l) {
- Literal linmap = map.remove(new LiteralWrapper(l));
+ Literal linmap = map.remove(new StructureWrapperForLiteral(l));
if (linmap != null) {
list.remove(linmap);
}
@@ -399,7 +399,7 @@
}
public Literal contains(Literal l) {
- return map.get(new LiteralWrapper(l));
+ return map.get(new StructureWrapperForLiteral(l));
}
protected Object clone() {
@@ -416,16 +416,6 @@
s.append(l+":"+l.hashCode()+",");
}
return s.toString();
- }
-
- /** a literal that uses equalsAsTerm for equals */
- final class LiteralWrapper implements Comparable<LiteralWrapper> {
- final private Literal l;
- public LiteralWrapper(Literal l) { this.l = l; }
- public int hashCode() { return l.hashCode(); }
- public boolean equals(Object o) { return o instanceof LiteralWrapper && l.equalsAsStructure(((LiteralWrapper)o).l); }
- public String toString() { return l.toString(); }
- public int compareTo(LiteralWrapper o) { return l.compareTo(o.l); }
- }
+ }
}
}
Added: trunk/src/jason/bb/StructureWrapperForLiteral.java
===================================================================
--- trunk/src/jason/bb/StructureWrapperForLiteral.java (rev 0)
+++ trunk/src/jason/bb/StructureWrapperForLiteral.java 2015-12-11 13:05:52 UTC (rev 1867)
@@ -0,0 +1,14 @@
+package jason.bb;
+
+import jason.asSyntax.Literal;
+
+/** a literal that uses equalsAsTerm for equals */
+public final class StructureWrapperForLiteral implements Comparable<StructureWrapperForLiteral> {
+ final private Literal l;
+ public StructureWrapperForLiteral(Literal l) { this.l = l; }
+ public int hashCode() { return l.hashCode(); }
+ public boolean equals(Object o) { return o instanceof StructureWrapperForLiteral && l.equalsAsStructure(((StructureWrapperForLiteral)o).l); }
+ public String toString() { return l.toString(); }
+ public int compareTo(StructureWrapperForLiteral o) { return l.compareTo(o.l); }
+ public Literal getLiteral() { return l; }
+}
Modified: trunk/src/jason/stdlib/package.html
===================================================================
--- trunk/src/jason/stdlib/package.html 2015-12-11 11:01:07 UTC (rev 1866)
+++ trunk/src/jason/stdlib/package.html 2015-12-11 13:05:52 UTC (rev 1867)
@@ -34,6 +34,7 @@
<li>{@link jason.stdlib.findall findall}: find a list of beliefs of some kind.</li>
<li>{@link jason.stdlib.setof setof}: find a set of beliefs of some kind.</li>
<li>{@link jason.stdlib.count count}: count the number of beliefs of some kind.</li>
+ <li>{@link jason.stdlib.name_space name_space}: checks whether an argument is a name space.</li>
</ul>
@@ -142,7 +143,7 @@
<li>{@link jason.stdlib.random random}: produces random numbers.</li>
- <li>{@link jason.stdlib.include include}: loads a source code at run time.</li>
+ <li>{@link jason.stdlib.include include}: imports a source code at run time.</li>
</ul>
</body>
Modified: trunk/src/test/ASParserTest.java
===================================================================
--- trunk/src/test/ASParserTest.java 2015-12-11 11:01:07 UTC (rev 1866)
+++ trunk/src/test/ASParserTest.java 2015-12-11 13:05:52 UTC (rev 1867)
@@ -49,7 +49,7 @@
assertTrue(l.negated());
Literal l1 = ASSyntax.parseLiteral("~B");
Literal l2 = ASSyntax.parseLiteral("B");
- assertFalse(l1.equals(l2));
+ assertTrue(l1.equals(l2)); // see comment in varterm equals
}
public void testTrue() throws ParseException {
Modified: trunk/src/test/BeliefBaseTest.java
===================================================================
--- trunk/src/test/BeliefBaseTest.java 2015-12-11 11:01:07 UTC (rev 1866)
+++ trunk/src/test/BeliefBaseTest.java 2015-12-11 13:05:52 UTC (rev 1867)
@@ -21,6 +21,7 @@
import jason.bb.DefaultBeliefBase;
import jason.bb.JDBCPersistentBB;
+import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -630,6 +631,30 @@
assertEquals(ag.getBB().size(), c.size());
}
+ public void testBUF() {
+ Agent ag = new Agent();
+ ag.initAg();
+
+ ag.getBB().add(Literal.parseLiteral("a(10)[source(bob)]"));
+ List<Literal> percepts = new ArrayList<Literal>();
+ percepts.add(Literal.parseLiteral("a(10)"));
+ percepts.add(Literal.parseLiteral("a(20)"));
+
+ assertEquals(2,ag.buf(percepts));
+ assertEquals(2,ag.getBB().size());
+
+ assertEquals(0,ag.buf(new ArrayList<Literal>(percepts)));
+ assertEquals(2,ag.getBB().size());
+
+ percepts.remove(1); // remove a(20)
+ assertEquals(1,ag.buf(new ArrayList<Literal>(percepts)));
+ assertEquals(1,ag.getBB().size());
+
+ percepts.clear();
+ assertEquals(1,ag.buf(new ArrayList<Literal>(percepts)));
+ assertEquals(1,ag.getBB().size());
+ }
+
private int iteratorSize(@SuppressWarnings("rawtypes") Iterator i) {
int c = 0;
while (i.hasNext()) {
Modified: trunk/src/test/NSTest.java
===================================================================
--- trunk/src/test/NSTest.java 2015-12-11 11:01:07 UTC (rev 1866)
+++ trunk/src/test/NSTest.java 2015-12-11 13:05:52 UTC (rev 1867)
@@ -128,9 +128,9 @@
// ns::A = ns::B // A -> B
u = new Unifier();
assertTrue(u.unifies(p1, p6));
- assertTrue(u.unifies(new VarTerm("A"), ASSyntax.parseLiteral("ns::bob(45)")));
- Literal t = (Literal)p1.capply(u);
- assertEquals("ns::bob(45)", t.toString());
+ assertFalse(u.unifies(new VarTerm("A"), ASSyntax.parseLiteral("ns::bob(45)")));
+ //Literal t = (Literal)p1.capply(u);
+ //assertEquals("ns::bob(45)", t.toString());
// ns::A = other::B // fail
u = new Unifier();
Modified: trunk/src/test/VarTermTest.java
===================================================================
--- trunk/src/test/VarTermTest.java 2015-12-11 11:01:07 UTC (rev 1866)
+++ trunk/src/test/VarTermTest.java 2015-12-11 13:05:52 UTC (rev 1867)
@@ -562,7 +562,7 @@
Literal l2 = ASSyntax.parseLiteral("~p(1)");
Unifier u = new Unifier();
assertTrue(u.unifies(l1, l2)); // ~B = ~p(1)
- assertEquals(u.get((VarTerm)l1).toString(),"~p(1)");
+ assertEquals(u.get((VarTerm)l1).toString(),"p(1)");
// apply in ~B should result in ~p(1)
assertEquals(l1.capply(u).toString(),"~p(1)");
@@ -584,6 +584,11 @@
assertEquals(l1.capply(u).toString(),"~p(1)");
l1 = ASSyntax.parseLiteral("~B");
+ l2 = ASSyntax.parseLiteral("A");
+ u = new Unifier();
+ assertFalse(u.unifies(l1, l2));
+
+ l1 = ASSyntax.parseLiteral("~B");
l2 = ASSyntax.parseLiteral("~A");
u = new Unifier();
assertTrue(u.unifies(l1, l2));
@@ -601,38 +606,39 @@
l2 = ASSyntax.parseLiteral("~A");
u = new Unifier();
assertTrue(u.unifies(l1, l2)); // A = B
- // if ~A = ~p(10), apply in B should be p(10).
+ // if ~A = ~p(10), then B -> p(10).
assertTrue(u.unifies(l2, ASSyntax.parseLiteral("~p(10)")));
//l2.apply(u);
- assertEquals(l2.capply(u).toString(),"~p(10)");
+ assertEquals("~p(10)", l2.capply(u).toString());
//l1.apply(u);
- assertEquals(l1.capply(u).toString(),"~p(10)"); // ~B is ~p(10)
+ assertEquals("~p(10)", l1.capply(u).toString()); // ~B is ~p(10)
VarTerm vb = new VarTerm("B");
//vb.apply(u);
- assertEquals(vb.capply(u).toString(),"p(10)"); // B is p(10)
+ assertEquals("p(10)", vb.capply(u).toString());
u = new Unifier();
u.unifies(new VarTerm("A"),ASSyntax.parseLiteral("p(10)"));
u.unifies(new VarTerm("B"),ASSyntax.parseLiteral("~p(10)"));
assertFalse(u.unifies(new VarTerm("A"), new VarTerm("B")));
+
l1 = ASSyntax.parseLiteral("~B");
l2 = ASSyntax.parseLiteral("~A");
assertFalse(u.unifies(l1, l2));
u = new Unifier();
u.unifies(new VarTerm("A"),ASSyntax.parseLiteral("p(10)"));
- assertFalse(u.unifies(new VarTerm(Literal.LNeg,"B"),new VarTerm("A")));
+ assertFalse(u.unifies( ASSyntax.createVar(Literal.LNeg, "B"), new VarTerm("A")));
u = new Unifier();
u.unifies(new VarTerm("A"),ASSyntax.parseLiteral("~p(10)"));
- vb = new VarTerm(Literal.LNeg,"B");
+ vb = ASSyntax.createVar(Literal.LNeg, "B");
assertTrue(u.unifies(vb,new VarTerm("A")));
//vb.apply(u);
assertEquals(vb.capply(u).toString(),"~p(10)");
u = new Unifier();
u.unifies(new VarTerm("A"),ASSyntax.parseLiteral("~p(10)"));
- vb = new VarTerm(Literal.LNeg,"B");
+ vb = ASSyntax.createVar(Literal.LNeg, "B");
assertTrue(u.unifies(vb,new VarTerm("A")));
vb = new VarTerm("B");
//vb.apply(u);
@@ -643,6 +649,7 @@
// => apply B is ~p(10)
// apply A is p(10)
// apply ~A is ~p(10)
+ /* should not work any more (B = ~A does not unify)
l1 = ASSyntax.parseLiteral("B");
l2 = ASSyntax.parseLiteral("~A");
u = new Unifier();
@@ -654,7 +661,8 @@
//l1.apply(u);
assertEquals(l1.capply(u).toString(),"~p(10)");
//l2.apply(u);
- assertEquals(l2.capply(u).toString(),"~p(10)");
+ assertEquals(l2.capply(u).toString(),"~p(10)");
+ */
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|