package aima.core.logic.fol.parsing.ast; import java.util.List; import aima.core.logic.fol.parsing.FOLVisitor; /** * @author Ravi Mohan * @author Ciaran O'Reilly */ public class Variable implements Term { private String value; private int hashCode = 0; private int indexical = -1; public Variable(String s) { value = s.trim(); } public Variable(String s, int idx) { value = s.trim(); indexical = idx; } public String getValue() { return value; } // // START-Term public String getSymbolicName() { return getValue(); } public boolean isCompound() { return false; } public List<Term> getArgs() { // Is not Compound, therefore should // return null for its arguments return null; } public Object accept(FOLVisitor v, Object arg) { return v.visitVariable(this, arg); } public Variable copy() { return new Variable(value, indexical); } // END-Term // public int getIndexical() { return indexical; } public void setIndexical(int idx) { indexical = idx; hashCode = 0; } public String getIndexedValue() { return value + indexical; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof Variable)) { return false; } Variable v = (Variable) o; return v.getValue().equals(getValue()) && v.getIndexical() == getIndexical(); } @Override public int hashCode() { if (0 == hashCode) { hashCode = 17; hashCode += indexical; hashCode = 37 * hashCode + value.hashCode(); } return hashCode; } @Override public String toString() { return value; } }