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; }