Fixed-point-combinators in C++

Ich bin daran interessiert, die tatsächliche Beispiele für die Verwendung von fixed-point-combinators (wie die y-combinator in C++. Haben Sie jemals einen festen Punkt combinator mit ei oder binden in real live code?

Ich fand dieses Beispiel im ei ein wenig dichten:

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);
}

Können Sie erklären, wie das alles funktioniert?

Ist es ein schönes, einfaches Beispiel, das vielleicht mit binden, mit vielleicht weniger Abhängigkeiten als diese?

  • Wenn Sie code schreiben, der sieht, dass niemand wird jemals in der Lage sein, es zu halten, einschließlich sich selbst.
  • Mein Punkt ist nicht, dass ich wirklich schreiben wollen, fixed-point-combinators oder Lambda-Ausdrücke in C++, sondern dass vielmehr ein Beispiel jener in C++ wäre erbaulich für jemanden wie mich, der nicht allzu vertraut mit den Sprachen, in denen Sie möglicherweise mehr nützlich.
Schreibe einen Kommentar