階乗を求める関数をC++で継続渡しで書いてみる足掻き
今まで何度か書いた継続渡しによる階乗計算。
C++でやってみようと思い立ち、やってみました。
っていうか、慣れてきたとは言え、継続渡し自体まだ理解できてない。
単なる翻訳です。
#include <iostream> #include <functional> #include <boost/function.hpp> #include <boost/bind.hpp> #include <boost/lambda/lambda.hpp> namespace { // 継続渡しで階乗 int FactCps(int n, boost::function<int(int)> cont) { return n==0 ? cont(1) : FactCps(n-1, boost::bind(cont, boost::bind(std::multiplies<int>(), n, _1))); } } int main() { std::cout << "10! = " << FactCps(10, boost::lambda::_1) << std::endl; return 0; }
実行結果は
10! = 3628800
だそうな。うむ、出来てるんじゃなかろうか。