Пример #1
0
 public static Implicant <T> ImplicantOf <T>(
     DnfAnd <T> minterm)
 {
     return(ImplicantOf(
                minterm
                .ElementSet
                .Select(operation =>
     {
         Term <T> term = operation switch
         {
             DnfVariable <T> variable => (Term <T>)PositiveTermOf(variable.Value),
             DnfNotVariable <T> notOperation => (Term <T>)NegativeTermOf(notOperation.Value),
             _ => throw new ArgumentException(
                 message: "pattern matching in C# is sucks",
                 paramName: nameof(operation))
         };
         return term;
     })));
 }
Пример #2
0
        internal static bool IsContainsMinterm <T>(
            this Implicant <T> implicant,
            DnfAnd <T> minterm)
        {
            var variableMintermMapB = minterm
                                      .ElementSet
                                      .ToDictionary(term => term.Value, term => term);

            return(!implicant
                   .TermSet
                   .Any(implicantTerm =>
            {
                var mintermTerm = variableMintermMapB[implicantTerm.Value];
                return (implicantTerm, mintermTerm) switch
                {
                    (PositiveTerm <T> _, DnfNotVariable <T> _) => true,
                    (NegativeTerm <T> _, DnfVariable <T> _) => true,
                    _ => false
                };
            }));
        }