namespace ChurBool
{
//church bool To normal bool
auto ToNormalBool = [](auto&&f)
{
return f(true, false);
};
auto True = [](auto&&m, auto&&)
{
return m;
};
auto False = [](auto&&, auto&&n)
{
return n;
};
auto And = [](auto&&m, auto&&n)
{
return m(n,m);
};
auto Or = [](auto&&m, auto&&n)
{
return m(m,n);
};
auto Not = [](auto&&m)
{
return [=](auto&&a, auto&&b)
{
return m(b,a);
};
};
auto Xor = [=](auto&&m, auto&&n)
{
return m(Not(n),n);
};
auto If = [](auto&&predicate)
{
return [=](auto&&t, auto&&f)
{
return predicate(t, f);
};
};
}
namespace ChurNum
{
//church number To normal number
auto ToNormalNum = [](auto&&f)
{
return f([](int a)
{
return a+1;
})(0);
};
//0
auto zero=[
church_encoding C++版实现
最新推荐文章于 2023-09-20 09:16:16 发布
这篇博客介绍了如何在C++中实现Church编码,包括布尔类型和数值类型的转换及基本操作,如加减乘除、逻辑运算。还展示了Church列表的Cons、Car和Cdr操作。然而,文章提到对于涉及递归的除法和取余操作,由于当前的If结构,可能会导致无限递归和内存溢出问题。
摘要由CSDN通过智能技术生成