用Boost.Bind表示教会数字
Expressing Church Numerals with Boost.Bind
教会数字可以在c++ 0x (c++ 11?)中使用语言的新lambda部分表示,如下所示:
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?如果有,怎么做?
好吧,我对教堂数字一无所知,我也没有实际测试过这段代码,但是像这样的应该工作:)
HTH !
// forward
boost::function<F (F)> church(unsigned int i);
typedef boost::function<int (int)> F;
int idFunc(int x)
{
return x;
}
static const F id = boost::bind(&idFunc, _1);
F ChurchFunc0(F f)
{
return id;
}
int ChurchFuncInner(F f, int i, int x)
{
return f(church(i - 1)(f)(x));
}
F ChurchFunc(F f, int i)
{
return boost::bind(&ChurchFuncInner, f, i, _1);
}
boost::function<F (F)> church(unsigned int i)
{
if (i == 0)
{
return boost::bind(&ChurchFunc0, _1);
}
return boost::bind(&ChurchFunc, _1, i);
}
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何用数字处理log(0)
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 我想做一个彼此不同但重复出现的数字
- 将数字转换为字母(例如:123 转换为一二三)
- C++如何计算用户输入的数字中的偶数位数
- 如何在C++中确定文本文件中的元素是字符还是数字
- 打印数字图案
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 如何检查一个c++字符串中有多少相同的字符/数字
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 将数字打印成文字
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 用Boost.Bind表示教会数字