• 趣味编程:CPS风格代码(C++11, C++14版)


    CPS风格代码(C++11版)

    #include <iostream>
    using namespace std;
    
    int add(int x, int y){return x + y;}
    int square(int x) {return x * x;}
    int pythagoras(int x, int y) {return add(square(x), square(y));}
    template<typename F>
    void add_cps(int x, int y, F f) {f(add(x, y));}
    template<typename F>
    void square_cps(int x, F f) {f(square(x));}
    template<typename F>
    void pythagoras_cps(int x, int y, F f) {
        square_cps(x, [=](int x_squared){
            square_cps(y, [=](int y_squared){
                add_cps(x_squared, y_squared, f);
            });
        });
    }
    
    int main()
    {
        cout << pythagoras(3, 4) << endl; // 25
        pythagoras_cps(3, 4, [](int x){cout << x << endl;}); // 25
    }
    

    CPS风格代码(C++14版)

    #include <iostream>
    using namespace std;
     
    int add(int x, int y){return x + y;}
    int square(int x) {return x * x;}
    int pythagoras(int x, int y) {return add(square(x), square(y));}
    auto add_cps = [](int x, int y, auto f) {f(add(x, y));};
    auto square_cps = [](int x, auto f) {f(square(x));};
    auto pythagoras_cps = [](int x, int y, auto f) {
        square_cps(x, [=](int x_squared){
            square_cps(y, [=](int y_squared){
                add_cps(x_squared, y_squared, f);
            });
        });
    };
     
    int main()
    {
        cout << pythagoras(3, 4) << endl; // 25
        pythagoras_cps(3, 4, [](int x){cout << x << endl;}); // 25
    }
    
  • 相关阅读:
    HTTP响应状态码记录
    Linux给指定用户或全部用户(已登录)发送消息
    JS面向对象的程序设计
    Linux下查看/管理当前登录用户及用户操作历史记录
    JS Math对象中一些小技巧
    Linux常用命令学习
    Python学习问题记录
    Python中dir()与help()的使用
    webdriver常用API
    数据库备份表
  • 原文地址:https://www.cnblogs.com/zwvista/p/7696485.html
Copyright © 2020-2023  润新知