@Override
    public String correrAlgoritmo() {

        for (Regla r : conjuntoDeReglas) {
            boolean seCompletaLaRegla = true;

            // La bandera de cumpliemento de regla cambiara si y sólo si el elemento
            // definitivamente no está en ninguna de las tres listas
            for (String s : r.getCausantes()) {

                if (false == isElementoEnListas(s)) {
                    seCompletaLaRegla = false;
                }
            }

            // Si se cumple la regla y el elemento producido no está ya en alguna de las listas
            if (seCompletaLaRegla && !isElementoEnListas(r.getProducto())) {

                    reglasDisparadas.add(r);
                    if (true != agregarAHechosInferidos(r.getProducto())) {
                        System.err.println("Hubo un problema al agregar "
                                + r.getIndiceDeRegla()
                                + " a la lista de hechos preguntados");
                    }
            }
        }
        this.resultado = crearTextoRespuesta();
        return resultado;
    }