Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- // abstract base class for a continuation functor
- struct continuation {
- virtual void operator() (unsigned) const = 0;
- };
- // accumulating continuation functor
- struct accum_cont: public continuation {
- private:
- unsigned accumulator_;
- const continuation &enclosing_;
- public:
- accum_cont(unsigned accumulator, const continuation &enclosing)
- : accumulator_(accumulator), enclosing_(enclosing) {};
- virtual void operator() (unsigned n) const {
- enclosing_(accumulator_ * n);
- };
- };
- void fact_cps (unsigned n, const continuation &c)
- {
- if (n == 0)
- c(1);
- else
- fact_cps(n - 1, accum_cont(n, c));
- }
- int main ()
- {
- // continuation which displays its' argument when called
- struct disp_cont: public continuation {
- virtual void operator() (unsigned n) const {
- std::cout << n << std::endl;
- };
- } dc;
- // continuation which multiplies its' argument by 2
- // and displays it when called
- struct mult_cont: public continuation {
- virtual void operator() (unsigned n) const {
- std::cout << n * 2 << std::endl;
- };
- } mc;
- fact_cps(4, dc); // prints 24
- fact_cps(5, mc); // prints 240
- return 0;
- }
- const AmberTask tickOneAmberHour = [](const amber::Amber& amber)
- {
- auto action1Res = magic::anyway(inflateShadowStorms, magic::wrap(amber));
- auto action2Res = magic::anyway(affectShadowStorms, action1Res);
- auto action3Res = magic::onFail(shadowStabilization, action2Res);
- auto action4Res = magic::anyway(tickWorldTime, action3Res);
- return action4Res.amber;
- };
- Car car1 = {"x555xx", "Ford Focus", 0, {}};
- Car car2 = {"y555yy", "Toyota Corolla", 10000, {}};
- std::vector<Car> cars = {car1, car2};
- auto zoomer = traversed<Car>() to modelL();
- std::function<std::string(std::string)> variator = [](std::string) { return std::string("BMW x6"); };
- std::vector<Car> result = over(zoomer, cars, variator);
- QVERIFY(result.size() == 2);
- QVERIFY(result[0].model == "BMW x6");
- QVERIFY(result[1].model == "BMW x6");
- template <typename A, typename B>
- UUB fmap(
- const func<B(UUA)>& f,
- const UUUUA& uuu)
- {
- const func<UB(UUUA)> f2 = [=](const UUUA& uuu2)
- {
- UB newUt;
- newUt.position = uuu2.position;
- newUt.field = fp::map(f, uuu2.field);
- return newUt;
- };
- return { fp::map(f2, uuu.field), uuu.position };
- }
- STML<Unit> takeFork(const TFork& tFork) {
- return withTVar<Fork, Unit>(tFork, [=](const Fork& fork) {
- if (fork.state == ForkState::Free) {
- return writeTVar<Fork>(tFork, Fork {fork.name, ForkState:Taken});
- }
- else {
- return retry<Unit>();
- }
- });
- }
- STML<Unit> takeForks(const TForkPair& forks) {
- STML<Unit> lm = takeFork(forks.left);
- STML<Unit> rm = takeFork(forks.right);
- return sequence(lm, rm);
- }
Add Comment
Please, Sign In to add comment