Korekurze - v teorii kategorií a informatice , druh operace duální k rekurzi . Ke generování nekonečných datových struktur se typicky používá corecursion (ve spojení s líným vyhodnocovacím mechanismem).
Pravidlo pro použití korekurze u kódovaných dat je duální s pravidlem pro použití rekurze u dat. Místo skládání datové struktury pomocí výsledku získaného rekurzivně na základě hodnoty pro základní případ, corecursion rozvine výsledek na základě počáteční hodnoty. Je třeba poznamenat, že korekurze vytváří potenciálně nekonečné datové struktury, zatímco pravidelná rekurze analyzuje (analyzuje) konečné datové struktury podle potřeby. Normální rekurze není použitelná pro kódová jména, protože proces analýzy se nemusí nikdy zastavit. V souladu s tím nemůže korekurze produkovat data, protože data jsou vždy konečná; ale každý dílčí výsledek produktivní korekurze je konečný a lze jej interpretovat jako data.
Příklad použití mechanismu corecursion v Haskell (výpočet nekonečného seznamu Fibonacciho čísel ):
fibs = 0 : 1 : další fibs kde next ( a : b : c ) = ( a + b ) : další ( b : c )Dalším příkladem je výpočet nekonečného seznamu prvočísel :
prvočísla = další [ 2 .. ] kde další ( x : xs ) = x : další [ y | y <- xs , rem y x /= 0 ]Tato funkce (neefektivně) implementuje algoritmus hledání děliče . [jeden]
Příklady uvedené v Haskellu nejsou zcela správné, protože v jazyce neexistuje žádný idiom kódových dat . V těchto příkladech jsou data kódu emulována pouze pomocí neomezeně určitého („nekonečného“) seznamu .