使用 Boost.Bind 表达教堂数字
教堂数字可以用 C++0x(C++11?)使用该语言的新 lambda 部分来表示,例如 this:
typedef function<int(int)> F;
static const F id = [=](int x) { return x; };
function<F(F)> church(unsigned int i)
{
if(i == 0) {
return [=] (F f) { return id; };
}
return [=] (F f) {
F tmp = [=](int x) { return f(church(i-1)(f)(x)); };
return tmp;
};
}
是否可以使用 Boost.Bind 和 C++03 表达 Church 数字?如果是这样,怎么办?
Church numerals can be expressed in C++0x (C++11?) using the new lambda parts of the language using something like this:
typedef function<int(int)> F;
static const F id = [=](int x) { return x; };
function<F(F)> church(unsigned int i)
{
if(i == 0) {
return [=] (F f) { return id; };
}
return [=] (F f) {
F tmp = [=](int x) { return f(church(i-1)(f)(x)); };
return tmp;
};
}
Is it possible to express Church numerals using Boost.Bind and C++03? If so, how?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
好吧,我对教堂数字一无所知,而且我还没有实际测试过这段代码,但是像这样的东西应该可以工作:)
HTH!
Ok, I don't know anything about church numerals, and I haven't actually tested this code, but something like this should work :)
HTH!