Continuation: Porovnání verzí

Skočit na navigaci Skočit na vyhledávání
Přidáno 501 bajtů ,  před 1 rokem
→‎Funkcionálně: přidán příklad implementace v C++
(Verze 18784210 uživatele Jj14 (diskuse) zrušena — na závorkách sice záleží, ale původní verze byla správně, ta změněná ani neprojde typovou kontrolou)
značka: vrácení zpět
(→‎Funkcionálně: přidán příklad implementace v C++)
 
Z funkcionálního pohledu je kontinuace [[Monáda (funkcionální programování)|monáda]] <math>A \mapsto (A \rightarrow R)\rightarrow R</math> definovaná takto: Jednotka je <math>\eta x \equiv \lambda f . f(x)</math> a vázání je <math>m >\!\!\!>\!\!= f \equiv \lambda g . m(\lambda x . f(x)(g))</math>.
 
Přímočará implementace v [[C++]] vypadá takto:
 
<syntaxhighlight lang="cpp">
template<typename A> using Cont = std::function<std::any(std::function<std::any(A)>)>;
 
template<typename A> Cont<A> contUnit(A x) {
return [x](std::function<std::any(A)> f) { return f(x); };
}
 
template<typename A, typename B> Cont<B> contBind(Cont<A> m, std::function<Cont<B>(A)> f) {
return [m,f](std::function<std::any(B)> g) {
return m([f,g](A x) { return f(x)(g); });
};
}
</syntaxhighlight>
 
== Reference ==

Navigační menu