Пример #1
0
        public static bool TryCastLogicalExpression(this JObject jObject, out ILogicalExpression expression)
        {
            var text = jObject.ToString();

            expression = null;
            if (Enum.TryParse <CompareGates>(jObject.TryGetValue <string>("$.compare"), out CompareGates compare))
            {
                var filedName = jObject.TryGetValue <string>("$.fieldName");


                var numValues = jObject.TryGetValues <decimal>("$.values");
                if (numValues != null)
                {
                    expression = new NumericalLogicalExpression(compare, filedName, numValues.ToArray());
                    return(true);
                }
                var strValues = jObject.TryGetValues <string>("$.values");
                if (strValues != null)
                {
                    expression = new StringLogicalExpression(compare, filedName, strValues.ToArray());
                    return(true);
                }
                return(false);
            }
            else
            {
                throw new OrgJoeyCastException("The enum type CompareGates cast error.");
            }
        }
Пример #2
0
 public ClickHouseJoin(IFromExpression fromExpr, ILogicalExpression joinExpr, JoinType joinType = JoinType.Inner)
 {
     FromExpression = fromExpr;
     JoinType       = joinType;
     JoinExpression = joinExpr;
     ResultColumns  = new List <SelectResultColumn>();
 }
Пример #3
0
        public static bool TTEntails(ILogicalExpression kb, ILogicalExpression query)
        {
            var kbSymbols    = kb.GetSymbols();
            var querySymbols = query.GetSymbols();

            kbSymbols.AddRange(querySymbols);

            return(TTCheckAll(kb, query, kbSymbols, new Dictionary <CellSymbol, bool>()));
        }
Пример #4
0
                    public IJsmExpression Evaluate(IServices services)
                    {
                        ILogicalExpression first = _first.LogicalEvaluate(services);
                        ILogicalExpression last  = _last.LogicalEvaluate(services);

                        if (first is IConstExpression n1)
                        {
                            if (n1.Value != 0)
                            {
                                // (true || ??) => true
                                return(ValueExpression.Create(0));
                            }

                            if (last is IConstExpression n2)
                            {
                                if (n2.Value != 0)
                                {
                                    // (false || true) => true
                                    return(ValueExpression.Create(0));
                                }
                                else
                                {
                                    // (false || false) => false
                                    return(ValueExpression.Create(1));
                                }
                            }
                            else
                            {
                                // (false || ??) => ??
                                return(_last);
                            }
                        }
                        else if (last is IConstExpression n2)
                        {
                            if (n2.Value != 0)
                            {
                                // (?? || true) => true
                                return(ValueExpression.Create(0));
                            }

                            // (?? || true) => ??
                            return(first);
                        }

                        // (?? || ??)
                        return(new LogOr(first, last));
                    }
Пример #5
0
        private static bool TTCheckAll(ILogicalExpression kb, ILogicalExpression query,
                                       IReadOnlyList <CellSymbol> symbols, IDictionary <CellSymbol, bool> model)
        {
            if (symbols.Count == 0)
            {
                if (PLTrue(kb, model))
                {
                    bool res = PLTrue(query, model);

                    return(res);
                }

                return(true);
            }

            CellSymbol p    = symbols[0];
            var        rest = new List <CellSymbol>(symbols);

            rest.RemoveAt(0);

            return(TTCheckAll(kb, query, rest, Extend(p, true, model)) &&
                   TTCheckAll(kb, query, rest, Extend(p, false, model)));
        }
Пример #6
0
 private static void MultiplyFactorizedExpression(ILogicalExpression targetLogical, object[] source)
 {
     if (targetLogical.Expressions.Enumerate <object>().Any())
     {
         foreach (var targetSubGroup in targetLogical.Expressions.OfType <ILogicalExpression>())
         {
             foreach (var sourceSubGroup in source.OfType <ILogicalExpression>())
             {
                 foreach (var expression in sourceSubGroup.Expressions)
                 {
                     targetSubGroup.AddExpression(expression);
                 }
             }
         }
     }
     else
     {
         foreach (var expression in source)
         {
             targetLogical.AddExpression(expression);
         }
     }
 }
Пример #7
0
 public Not(ILogicalExpression logic)
 {
     this.logic = logic;
 }
Пример #8
0
 public void Add(ILogicalExpression logic)
 {
     logics.Add(logic);
 }
Пример #9
0
        public static ILogicalExpression LogicalEvaluate(this ILogicalExpression expression, IServices services)
        {
            IJsmExpression jsm = expression.Evaluate(services);

            return((ILogicalExpression)jsm);
        }
Пример #10
0
 private static bool PLTrue(ILogicalExpression expression, IDictionary <CellSymbol, bool> model)
 {
     return(expression.Eval(model));
 }
Пример #11
0
 public LogOr(ILogicalExpression first, ILogicalExpression last)
 {
     _first = first;
     _last  = last;
 }
Пример #12
0
 public void Tell(ILogicalExpression expr)
 {
     kb.Add(expr);
 }
Пример #13
0
 public bool Ask(ILogicalExpression query)
 {
     return(Entailment.TTEntails(kb, query));
 }