gpt4 book ai didi

c++ - C++ 中的定点组合器

转载 作者:可可西里 更新时间:2023-11-01 16:52:51 25 4
gpt4 key购买 nike

我对使用定点组合器的实际示例很感兴趣(例如 C++ 中的 y-combinator。您是否曾在实际代码中使用过定点组合器与 eggbind

我发现 egg 中的这个例子有点密集:

void egg_example()
{
using bll::_1;
using bll::_2;

int r =
fix2(
bll::ret<int>(
// \(f,a) -> a == 0 ? 1 : a * f(a-1)
bll::if_then_else_return( _2 == 0,
1,
_2 * lazy(_1)(_2 - 1)
)
)
) (5);

BOOST_CHECK(r == 5*4*3*2*1);
}

你能解释一下这一切是如何运作的吗?

是否有一个很好的简单示例,也许使用 bind 的依赖性可能比这个更少?

最佳答案

这里是转换为 boost::bind 的相同代码,请注意 y-combinator 及其在 main 函数中的应用程序。我希望这会有所帮助。

#include <boost/function.hpp>
#include <boost/bind.hpp>
#include <iostream>

// Y-combinator compatible factorial
int fact(boost::function<int(int)> f,int v)
{
if(v == 0)
return 1;
else
return v * f(v -1);
}

// Y-combinator for the int type
boost::function<int(int)>
y(boost::function<int(boost::function<int(int)>,int)> f)
{
return boost::bind(f,boost::bind(&y,f),_1);
}


int main(int argc,char** argv)
{
boost::function<int(int)> factorial = y(fact);
std::cout << factorial(5) << std::endl;
return 0;
}

关于c++ - C++ 中的定点组合器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/152084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com