Expression problem: Difference between revisions

Content deleted Content added
Arialdo (talk | contribs)
Problem description: Also for 2nd C# snippet, less uselessly public members
Tags: Mobile edit Mobile web edit
Arialdo (talk | contribs)
Problem Solution using Object Algebra: C# snippet for Problem Solution has only the strictly necessary public members
Tags: Mobile edit Mobile web edit
Line 199:
 
<syntaxhighlight lang="c#" line="1">
public interface ExpAlgebra<T>
{
T Lit(int n);
Line 205:
}
 
public class ExpFactory : ExpAlgebra<IEvalExp>
{
public IEvalExp Lit(int n)
Line 218:
}
 
public static class ExampleTwo<T>
{
public static T AddOneToTwo(ExpAlgebra<T> ae) => ae.Add(ae.Lit(1), ae.Lit(2));
Line 227:
 
<syntaxhighlight lang="c#" line="1">
public interface IPrintExp : IEvalExp
{
string Print();
}
 
public class PrintableLit : Lit, IPrintExp
{
publicinternal PrintableLit(int n) : base(n)
{
N = n;
}
 
publicinternal int N { get; }
 
public string Print()
Line 247:
}
 
public class PrintableAdd : Add, IPrintExp
{
publicinternal PrintableAdd(IPrintExp left, IPrintExp right) : base(left, right)
{
Left = left;
Line 255:
}
 
publicinternal new IPrintExp Left { get; }
 
publicinternal new IPrintExp Right { get; }
 
public string Print()
Line 265:
}
 
public class PrintFactory : ExpFactory, ExpAlgebra<IPrintExp>
{
public IPrintExp Add(IPrintExp left, IPrintExp right)
Line 278:
}
 
public static class ExampleThree
{
publicinternal static int Evaluate() => ExampleTwo<IPrintExp>.AddOneToTwo(new PrintFactory()).Eval();
publicinternal static string Print() => ExampleTwo<IPrintExp>.AddOneToTwo(new PrintFactory()).Print();
}
</syntaxhighlight>