private void addFormulaBtn_Click(object sender, EventArgs e) { try { if (formulaFluentsCmb.SelectedValue == null) { return; } resultFormula.AddItem(formulaFluentsCmb.SelectedValue); formulaTB.Text = resultFormula.ToString(); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private INumber DiffExecute(RuntimeData runtime, string t, INumber m, INumber param0, bool kaiki) { if (m is IConstParameter) { return(Number.New(0)); } if (m is Variable) { Variable v = m.Clone() as Variable; if (v.Name == t) { if (v.Pow.Equals(runtime, Number.New(1))) { return(v.Multi); } INumber multiple = v.Multi.Multiple(runtime, v.Pow); bool powFormula = !(v.Pow is IConstParameter); var pow = v.Pow; v.Pow = v.Pow.Subtract(runtime, Number.New(1)); v.Multi = multiple; if (powFormula) { MultipleFormula mf = new Expression.MultipleFormula(); mf.AddItem(runtime, v); mf.AddItem(runtime, ExecuteDiff(runtime, pow, t, param0)); return(mf); } else { if (runtime.Setting.DoOptimize) { return(v.Optimise(runtime)); } else { return(v); } } } else { if (kaiki) { throw new FunctionExecutionCancelException(); } // y*(y')みたいな形にする MultipleFormula mf = new Expression.MultipleFormula(); FunctionFormula ff = new Expression.FunctionFormula(); Formula f = new Formula() { Token = new Token("(", Analyzer.TokenType.Syntax) }; var d = new Variable(new FuncCalc.Token(t, Analyzer.TokenType.Member)); mf.Items.Add(m); ff.AddItem(runtime, new Member(new Token("diff", Analyzer.TokenType.Member))); f.AddItem(runtime, d); f.AddItem(runtime, new LineBreak(new Token(",", Analyzer.TokenType.Syntax))); f.AddItem(runtime, v); ff.AddItem(runtime, f); mf.Items.Add(ff); // AddItemを使うと無限ループ // return mf; return(ff); } } throw new NotImplementedException(); }