static ExprList MergeArgs( CoreBuilder b, IEnumerable<Expr> args, Func<Expr, ExprList?> getArgs, BigRational aggregateSeed, Func<BigRational, BigRational, BigRational> aggregate, Func<IEnumerable<Expr>, IEnumerable<Expr>> group) { var mergedArgs = args .SelectMany(x => getArgs(x) ?? x.Yield()); var @const = mergedArgs .Select(x => x.AsConst()) .Where(x => x != null) .Select(x => x.Value) .Aggregate(aggregateSeed, aggregate); var other = group(mergedArgs.Where(x => !x.IsConst())); return (@const == aggregateSeed && other.Any() ? other : Const(@const).Yield().Concat(other)).ToExprList(); }
SingleDivTransformer(CoreBuilder builder, bool openBraces) { this.openBraces = openBraces; this.builder = builder; }