Laden...

Formula 0.1

Erstellt von ZiMD vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.663 Views
ZiMD Themenstarter:in
564 Beiträge seit 2005
vor 16 Jahren
Formula 0.1

Formula ist eine Bibliothek die ich vor einiger zeit geschrieben habe.
Sie ermöglicht es Formeln zu Parsen, vereinfachen zu lassen und abzuleiten.
Weiter besteht die Möglichkeit die Formeln als Ascii ausgeben zu lassen.
Die Bibliothek und die Beispielanwendungen wurden mit .net 3.5 erstellt.

ZiMD Themenstarter:in
564 Beiträge seit 2005
vor 16 Jahren
W
558 Beiträge seit 2006
vor 16 Jahren

Wow!
Ein tolles Programm.

grüße
webstarg

ZiMD Themenstarter:in
564 Beiträge seit 2005
vor 16 Jahren

Auf Wunsch bin ich nochmal die Bibliothek durchgegangen und habe geschaut, wo ich Konstrukte von C# 3.0 eingesetzt habe und wie man sie durch "älteren" Code ersetzen kann.

Auf jeden Fall werden die Spracherweiterungen nochmal in [Artikel] Spracherweiterungen in C# 3.0 von Noodle erklärt.

Automatische Eigenschaften:
Das Ersetzen sollte kein Problem sein.

Container/AdditionElement.cs
Container/MultiplicationElement.cs
Formulas/BaseFunction.cs
Formulas/Constant.cs
Formulas/Division.cs
Formulas/Number.cs
Formulas/Power.cs
Formulas/Variable.cs

Objektinitialisierer:
Genauso hier.

Formulas/Addition.cs
Formulas/BaseFunction.cs
Formulas/Constant.cs
Formulas/Division.cs
Formulas/Multiplication.cs
Formulas/Power.cs

Lambda Expressions:


return elements.All(el => el.Formula.Simplified);
Wird zu:
foreach (AdditionElement element in elements)
{
    if (!element.Formula.Simplified)
        return false;
}
return true;

Formulas/Addition.cs
Formulas/Multiplication.cs
Formulas/Power.cs

LINQ Abfragen:


//Formulas/Addition.cs (Line 422)
//---------------------------------------------
// x + x => 2*x
//---------------------------------------------
var noneMultiplications = from element in elements
                          where !(element.Formula is Multiplication)
                          group element by element.Formula.GetHashCode() into g
                          select g;
                          
//Formulas/Division.cs (Line 183)
int length = numeratorLines.Union(denominatorLines).
                    OrderByDescending(l => l.Length).
                    First().Length;

In diesem Fall ist das Ersetzen leider nicht so trivial. Wenn ihr's selber machen wollt wünsch ich euch schon mal viel Spaß 😉. Einen guten Ansatz bietet hier aber herbivores Hilfreiche Iteratoren / Improving Foreach .

Formulas/Addition.cs
Formulas/Division.cs
Formulas/Multiplication.cs

Vereinzelt habe ich auch Implizit typisierte lokale Variablen benutzt.