Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

fp:zajimave_priklady [2011/10/27 13:48]
petr [Funkční implementace s η-expanzí]
fp:zajimave_priklady [2011/10/27 13:49] (aktuální)
petr [Funkční implementace s η-expanzí]
Řádek 21: Řádek 21:
     f((z : A) => y(f)(z));     f((z : A) => y(f)(z));
 </code> </code>
-Zde již rekurze bude fungovat, protože výraz ''(: A) => y(f)(x)'' nelze vyhodnotit, takže ta se dosadí do ''f'' tak, jak je. Vyhodnotí až tehdy, když jej ''f'' aplikuje na nějaký argument typu ''A''. Povšimněte si, že díky změně je typ argumentu ''f'' méně obecný (což ovšem pro použití kombinátoru nevadí).+Zde již rekurze bude fungovat, protože výraz ''(: A) => y(f)(z)'' nelze vyhodnotit, takže ta se dosadí do ''f'' tak, jak je. Vyhodnotí až tehdy, když jej ''f'' aplikuje na nějaký argument typu ''A''. Povšimněte si, že díky změně je typ argumentu ''f'' méně obecný (což ovšem pro použití kombinátoru nevadí).
  
 Jiné řešení můžeme dostat tak, že η-expanzi provedeme na celou definici funkce: Jiné řešení můžeme dostat tak, že η-expanzi provedeme na celou definici funkce: