Korekurzió – elmélet és számítástechnika kategóriában, a rekurzióval kettős művelettípus . Általában a korekurziót használják (a lusta kiértékelési mechanizmussal együtt ) végtelen adatszerkezetek generálására.
A kódolt adatokon történő korkurzió használatának szabálya kettős, mint az adatokon történő rekurzió használatára vonatkozó szabály. Ahelyett , hogy az adatszerkezetet az alapeset értéke alapján rekurzívan kapott eredmény felhasználásával hajtogatná , a corecursion a kezdeti érték alapján bontja ki az eredményt. Megjegyzendő, hogy a korekurzió potenciálisan végtelen adatstruktúrákat hoz létre , míg a rendszeres rekurzióelemzés (elemzi) szükség szerint véges adatstruktúrákat. A normál rekurzió nem alkalmazható kódnevekre, mivel előfordulhat, hogy az elemzési folyamat soha nem áll le. Ennek megfelelően a korkurzió nem tud adatot előállítani, mivel az adatok mindig végesek; de a produktív magkurzió minden részeredménye véges és adatként értelmezhető.
Példa a magkurziós mechanizmus használatára a Haskellben ( Fibonacci-számok végtelen listájának kiszámítása ):
fibs = 0 : 1 : következő fibs ahol következő ( a : b : c ) = ( a + b ) : következő ( b : c )Egy másik példa a prímszámok végtelen listájának kiszámítása :
prímszámok = következő [ 2 .. ] ahol next ( x : xs ) = x : next [ y | y < -xs , rem y x /= 0 ]Ez a függvény (nem hatékonyan) az osztókeresési algoritmust valósítja meg . [egy]
A Haskellben megadott példák nem teljesen helyesek, mivel a nyelvben nincs kódadat- idióma . Ezekben a példákban a kódadatok csak egy korlátlan-határozott („végtelen”) listával emulálódnak .