public EvaluationResult evaluate(List inputs, EvaluationCtx context) {

        // Evaluate the arguments one by one. As soon as we can
        // return a result, do so. Return Indeterminate if any argument
        // evaluated is indeterminate.
        Iterator it = inputs.iterator();
        while (it.hasNext()) {
            Evaluatable eval = (Evaluatable)(it.next());

            // Evaluate the argument
            EvaluationResult result = eval.evaluate(context);
            if (result.indeterminate())
                return result;

            AttributeValue value = result.getAttributeValue();
            boolean argBooleanValue = ((BooleanAttribute)value).getValue();

            switch (getFunctionId()) {
            case ID_OR:
                if (argBooleanValue)
                    return EvaluationResult.getTrueInstance();
                break;
            case ID_AND:
                if (!argBooleanValue)
                    return EvaluationResult.getFalseInstance();
                break;
            }
        }

        if (getFunctionId() == ID_OR)
            return EvaluationResult.getFalseInstance();
        else
            return EvaluationResult.getTrueInstance();
    }