Lazy transform in C++
c++, functional-programming, lazy-evaluation, python
Solution
Employing Boost.Range:
int main(){
auto map = boost::adaptors::transformed; // shorten the name
auto sink = generate(1) | map([](int x){ return 2*x; })
| map([](int x){ return x+1; })
| map([](int x){ return 3*x; });
for(auto i : sink)
std::cout << i << "\n";
}
Live example including the `generate` function.
Problem
I have the following Python snippet that I would like to reproduce using C++: ``` from itertools import count, imap source = count(1) pipe1 = imap(lambda x: 2 * x, source) pipe2 = imap(lambda x: x + 1, pipe1) sink = imap(lambda x: 3 * x, pipe2) for i in sink: print i ``` I've heard of Boost Phoenix, but I couldn't find an example of a lazy `transform` behaving in the same way as Python's `imap`. Edit: to clarify my question, the idea is not only to apply functions in sequence using a `for`, but rather to be able to use algorithms like `std::transform` on infinite generators. The way the functions are composed (in a more functional language like dialect) is also important, as the next step is function composition. Update: thanks bradgonesurfing, David Brown, and Xeo for the amazing answers! I chose Xeo's because it's the most concise and it gets me right where I wanted to be, but David's was very important into getting the concepts through. Also, bradgonesurfing's tipped Boost::Range :).