package tefkat.engine.runtime.functions;
import tefkat.engine.runtime.Binding;
import tefkat.engine.runtime.Context;
import tefkat.engine.runtime.Function;
public class Sum implements Function {
public Object call(Context context, Binding unifier, Object[] params) {
Number[] collection = (Number[]) params[0];
boolean integral = true;
for (int i = 0; i < collection.length && integral; i++) {
integral |= collection[i] instanceof Double;
}
if (integral) {
long result = 0;
for (int i = 0; i < collection.length && integral; i++) {
result += collection[i].longValue();
}
return result;
} else {
double result = 0;
for (int i = 0; i < collection.length && integral; i++) {
result += collection[i].doubleValue();
}
return result;
}
}
}