Haskellのように、とは言わないが、C++でもPythonのように書けないだろうか。
桃の天然水 - Project Euler 1(1)
ではHaskellのように。
#include <iostream> #include <pstade/oven/counting.hpp> #include <pstade/oven/filtered.hpp> #include <pstade/oven/regular.hpp> #include <pstade/oven/numeric.hpp> #include <boost/lambda/lambda.hpp> namespace oven = pstade::oven; using boost::lambda::_1; const int n = 1000; int main() { std::cout << oven::accumulate( oven::counting(1, n) | oven::filtered(oven::regular(_1 % 3 == 0 || _1 % 5 == 0)), 0) << std::endl; }
ついでにリスト内包表記でも。
#include <iostream> #include <pstade/oven/counting.hpp> #include <pstade/oven/comprehension.hpp> #include <pstade/oven/regular.hpp> #include <pstade/oven/numeric.hpp> #include <boost/lambda/lambda.hpp> #include <boost/lambda/bind.hpp> namespace oven = pstade::oven; using boost::lambda::_1; const int n = 1000; int main() { std::cout << oven::accumulate( oven::comprehension( _1, _1 % 3 == 0 || _1 % 5 == 0, boost::lambda::bind(oven::counting, 1, n) ), 0 ) << std::endl; }