From e00c1e3f71bb1840e10a85af53469a81c73c7ef1 Mon Sep 17 00:00:00 2001 From: Carlo Zancanaro Date: Mon, 30 Apr 2012 21:17:07 +1000 Subject: Functional algorithm. Unoptimised. --- impl/main.cpp | 48 +++++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 23 deletions(-) (limited to 'impl/main.cpp') diff --git a/impl/main.cpp b/impl/main.cpp index 6f84cdd..579db25 100644 --- a/impl/main.cpp +++ b/impl/main.cpp @@ -18,30 +18,32 @@ struct Complete { T _value; };*/ +typedef std::vector*> Args; +typedef Expression E; +typedef Constant C; +typedef Minimum Min; + std::vector< Expression* > empty; int main () { - EquationSystem fac; - Variable* x = fac.newVariable("x"); - Variable* y = fac.newVariable("y"); - VariableAssignment rho(2); - rho[*x] = 12; - rho[*y] = 10; - Expression expr(x, empty); - - std::vector*> args; - args.push_back(new Expression(x, empty)); - args.push_back(new Expression(y, empty)); - args.push_back(new Expression(new Constant(10), empty)); - MaxExpression* maxExpression = fac.newMaxExpression(args); - Expression* minExpression = new Expression(new Minimum(), args); - - - MaxStrategy strat(1); - strat[*maxExpression] = 0; - cout << strat(*maxExpression,rho) << endl; - - fac[*x] = minExpression; - fac[*y] = minExpression; - cout << fac.maxFixpoint()[*x] << endl; + EquationSystem sys; + Variable* x = sys.newVariable("x"); + + Args incArgs; + incArgs.push_back(new E(x, empty)); + + Args minArgs; + minArgs.push_back(new E(new Increment, incArgs)); + minArgs.push_back(new E(new C(100), empty)); + + Args maxArgs; + maxArgs.push_back(new E(new C(0), empty)); + maxArgs.push_back(new E(new Min(), minArgs)); + + sys[*x] = sys.newMaxExpression(maxArgs); + // x = max(0, min(x+1, 100)) + + cout << sys.minFixpoint()[*x] << endl; + // -> 100, as expected + return 0; } -- cgit v1.2.3