Korekurze

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 16. července 2019; kontroly vyžadují 2 úpravy .

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).

Obecné poznámky

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říklady

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 .

Viz také

Poznámky

  1. Melissa E., „The Genuine Sieve of Eratosthenes“ Archivováno 9. listopadu 2017 ve Wayback Machine , Journal of Functional Programming, Publikováno online nakladatelstvím Cambridge University Press 9. října 2008 doi:10.1017/S0956796808007004

Literatura

  • David Turner . Total Functional Programming  //  Journal of Universal Computer Science : deník. - 2004. - 28. července ( roč. 10 , č. 7 ). - str. 751-768 .