public EvaluationResult evaluate(List inputs, EvaluationCtx context) {
        
        // Evaluate the arguments
        AttributeValue [] argValues = new AttributeValue[inputs.size()];
        EvaluationResult result = evalArgs(inputs, context, argValues);
        if (result != null)
            return result;
        
        // Now that we have real values, perform the add operation
        switch (getFunctionId()) {
        case ID_INTEGER_ADD: {
            long sum = 0;
            for (int index = 0; index < argValues.length; index++) {
                long arg = ((IntegerAttribute) argValues[index]).getValue();
                sum += arg;
            }
            
            result = new EvaluationResult(new IntegerAttribute(sum));
            break;
        }
        case ID_DOUBLE_ADD: {
            double sum = 0;
            for (int index = 0; index < argValues.length; index++) {
                double arg =
                    ((DoubleAttribute) argValues[index]).getValue();
                sum = sum + arg;
            }
            
            result = new EvaluationResult(new DoubleAttribute(sum));
            break;
        }
        }

        return result;
    }