package jetbrains.mps.samples.lambdaCalculus.runtime;
/*Generated by MPS */
import java.util.List;
import java.util.ArrayList;
public abstract class Function {
protected List myArgs = new ArrayList();
protected String myType;
public Function() {
}
public Object apply(Object... argValue) {
for (Object arg : argValue) {
this.myArgs.add(arg);
}
if (this.myArgs.size() == this.getParamsCount()) {
return this.eval();
} else {
return this;
}
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("Function(");
int j = 0;
for (Object arg : this.myArgs) {
sb.append(arg);
if (j != this.getParamsCount() - 1) {
sb.append(", ");
}
j++;
}
for (int i = this.myArgs.size(); i < this.getParamsCount(); i++) {
sb.append("__");
if (i != this.getParamsCount() - 1) {
sb.append(", ");
}
}
sb.append(") : ");
sb.append(this.myType);
return sb.toString();
}
public abstract Object eval();
public abstract Function copy();
public abstract int getParamsCount();
}