Advertisement
Guest User

Untitled

a guest
Dec 16th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.14 KB | None | 0 0
  1. #include <iostream>
  2. #include <iterator>
  3. #include <numeric>
  4.  
  5. template <typename T>
  6. auto map(T fn)
  7. {
  8.     return [=] (auto reduce_fn) {
  9.         return [=] (auto accumulator, auto input) {
  10.             return reduce_fn(accumulator, fn(input));
  11.         };
  12.     };
  13. }
  14.  
  15. template <typename T>
  16. auto filter(T predicate)
  17. {
  18.     return [=] (auto reduce_fn) {
  19.         return [=] (auto accumulator, auto input) {
  20.             if (predicate(input)) {
  21.                 return reduce_fn(accumulator, input);
  22.             } else {
  23.                 return accumulator;
  24.             }
  25.         };
  26.     };
  27. }
  28.  
  29. int main()
  30. {
  31.     std::istream_iterator<int> it {std::cin};
  32.     std::istream_iterator<int> end_it;
  33.  
  34.     auto even  ([](int i) { return i % 2 == 0; });
  35.     auto twice ([](int i) { return i * 2; });
  36.  
  37.     auto copy_and_advance ([](auto it, auto input) {
  38.         *it = input;
  39.         return ++it;
  40.     });
  41.  
  42.     std::accumulate(it, end_it,
  43.             std::ostream_iterator<int>{std::cout, ", "},
  44.             filter(even)(
  45.                 map(twice)(
  46.                     copy_and_advance
  47.                 )
  48.             ));
  49.     std::cout << '\n';
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement