Пример #1
0
    private int CanApply(Rule r)
    {
        int maxlevel = -1;

        // On vérifie si chaque prémises est vraie
        foreach (IFact f in r.Premises)
        {
            IFact foundFact = fDB.Search(f.Name());
            if (foundFact == null)
            {
                // Ce fait n'existe pas dans la base actuellement
                if (f.Question() != null)
                {
                    // On le demande à l'utilisateur
                    // et on l'ajoute en base
                    foundFact = FactFactory.Fact(f, this);
                    maxlevel  = Math.Max(maxlevel, 0);
                }
                else
                {
                    // On sait que la régle ne s'applique pas
                    return(-1);
                }
            }

            // On a un fait en base, on vérfie sa valeur
            if (!foundFact.Value().Equals(f.Value()))
            {
                // Elle ne correspond pas
                return(-1);
            }
            else
            {
                // Elle correspond
                maxlevel = Math.Max(maxlevel, foundFact.Level());
            }
        }

        return(maxlevel);
    }
Пример #2
0
        private int CanApply(Rule r)
        {
            int maxLevel = -1;

            // Se comprueba si se cumple cada premisa
            foreach (IFact f in r.Premises)
            {
                IFact foundFact = fDB.Search(f.Name());
                if (foundFact == null)
                {
                    // Este hecho no existe en la base actualmente
                    if (f.Question() != null)
                    {
                        // Se le consulta al usuario
                        // y se agrega a la base
                        foundFact = FactFactory.Fact(f, this);
                        fDB.AddFact(foundFact);
                        maxLevel = Math.Max(maxLevel, 0);
                    }
                    else
                    {
                        // Se sabe que la regla no se aplica
                        return(-1);
                    }
                }
                // Tenemos un hecho en la base, verificamos su valor
                if (!foundFact.Value().Equals(f.Value()))
                {
                    // No se corresponde
                    return(-1);
                }
                else
                {
                    // Se corresponde
                    maxLevel = Math.Max(maxLevel, foundFact.Level());
                }
            }
            return(maxLevel);
        }