count

Pythonのcountは指定した数から順に整数を出していきます。ここでは、引数で公差も指定できるようにしました。

class cCount : public cIterable<int> {
    int     current;
    int     delta;
    
public:
    cCount(int s, int d) : current(s - d), delta(d) { }
    
    bool exists_next() {
        current += delta;
        return true;
    }
    int value() const {
        return current;
    }
};

shared_ptr<cIterable<int>> count(int s = 0, int d = 1) {
    return shared_ptr<cIterable<int>>(new cCount(s, d));
}

以下は、50以下の平方数の和を求めています。

int main() {
    auto    g = map([] (int n) { return n * n; }, count(1));
    auto    pred = [] (int n) { return n <= 50; };
    cout << sum(takewhile(pred, g)) << endl;
}