相关疑难解决方法(0)

C++中的定点组合子

我对使用定点组合器的实际例子很感兴趣(例如C++中的y-combinator.你有没有使用带有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);
}
Run Code Online (Sandbox Code Playgroud)

你能解释一下这一切是怎么回事吗?

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

c++ bind y-combinator

10
推荐指数
2
解决办法
6078
查看次数

用于递归lambda的Typedef

有没有办法创建一个typedef以下(y-combinator的基本"纯"实现)将编译?

typedef ??? f;
[](f x){x(x);} ([](f x){x(x);});
Run Code Online (Sandbox Code Playgroud)

这具有创建"递归lambda"的效果,即通过使用第二个lambda来获取对自身的引用来调用自身的效果.x在第一个lambda中是对第二个lambda的引用,因此x(x)使用对它自己的引用调用第二个lambda.此后,第二个lambda通过呼叫递归x(x).这段代码在执行时应该产生一个无限循环,直到它遇到堆栈溢出.第二个函数的更复杂的实现可以产生任意的递归行为.

我尝试了typedef各种版本,void(*)(...)但我不相信能成功.我的模板元编程不够强大,无法处理这类事情.

c++ lambda c++11

6
推荐指数
1
解决办法
695
查看次数

标签 统计

c++ ×2

bind ×1

c++11 ×1

lambda ×1

y-combinator ×1