package models.dataConstraintModel;
import models.algebra.Expression;
import models.algebra.Symbol;
import models.algebra.Term;
public class ListTerm extends Term {
public ListTerm() {
super(new Symbol("list", -1));
setType(DataConstraintModel.typeList);
}
public void append(Expression value) {
addChild(value);
}
public Expression get(int index) {
return getChild(index);
}
public int size() {
return children.size();
}
@Override
public Expression unify(Expression another) {
if (another instanceof ListTerm) {
ListTerm anotherTerm = (ListTerm) another;
if (children.size() != anotherTerm.children.size()) return null;
ListTerm unifiedTerm = new ListTerm();
for (int i = 0; i < children.size(); i++) {
unifiedTerm.addChild(children.get(i).unify(anotherTerm.children.get(i)));
}
return unifiedTerm;
}
return this;
}
@Override
public Object clone() {
ListTerm newTerm = new ListTerm();
for (Expression e: children) {
newTerm.addChild((Expression) e.clone());
}
return newTerm;
}
public String toString() {
String listStr = "[";
String delim = "";
for (Expression child: getChildren()) {
listStr += delim + child.toString();
delim = ", ";
}
return listStr + "]";
}
}