package models.algebra; import java.util.HashMap; public class Variable extends Expression { private String name; private Type type = null; public Variable(String name) { super(); this.name = name; } public Variable(String name, Type type) { super(); this.name = name; this.type = type; } public String getName() { return name; } public Type getType() { return type; } public void setType(Type type) { this.type = type; } @Override public <T extends Expression> HashMap<Position, T> getSubTerms(Class<T> clazz) { HashMap<Position, T> subTerms = new HashMap<>(); if (clazz == this.getClass()) { subTerms.put(new Position(), (T) this); } return subTerms; } @Override public Expression getSubTerm(Position pos) { if (pos.isEmpty()) return this; return null; } @Override public Expression unify(Expression another) { return (Expression) another.clone(); } @Override public Expression getInverseMap(Expression outputValue, Position targetPos) { if (targetPos.isEmpty()) return outputValue; return null; } @Override public boolean contains(Expression exp) { return equals(exp); } @Override public boolean equals(Object another) { if (!(another instanceof Variable)) return false; return name.equals(((Variable) another).name); } @Override public int hashCode() { return name.hashCode(); } @Override public Object clone() { return new Variable(name, type); } public String toString() { return name; } }