Corecursion - luokassa teoria ja tietojenkäsittelytiede , operaatiotyyppi, joka on kaksinkertainen rekursiolle . Tyypillisesti corecursiota käytetään (yhdessä laiskan arviointimekanismin kanssa ) äärettömien tietorakenteiden luomiseen.
Sääntö koodatun datan corecursion käytöstä on kaksoissääntö datan rekursion käytön kanssa. Sen sijaan , että tietorakenne taitetaan käyttämällä rekursiivisesti saatua tulosta perustapauksen arvon perusteella , corecursion purkaa tuloksen alkuarvon perusteella. On huomattava, että corecursion luo mahdollisesti äärettömiä tietorakenteita, kun taas säännöllinen rekursioanalyysi (jäsentää) äärellisiä tietorakenteita tarpeen mukaan. Normaalia rekursiota ei voida soveltaa koodinimiin, koska jäsennysprosessi ei ehkä koskaan pysähdy. Näin ollen corecursio ei voi tuottaa dataa, koska data on aina äärellistä; mutta jokainen tuottavan corecursion osatulos on äärellinen ja voidaan tulkita dataksi.
Esimerkki Corecursion-mekanismin käytöstä Haskellissa ( Fibonacci-lukujen loputtoman luettelon laskeminen ):
fibs = 0 : 1 : seuraava fibs missä seuraava ( a : b : c ) = ( a + b ) : seuraava ( b : c )Toinen esimerkki on äärettömän alkulukuluettelon laskeminen :
alkuluvut = seuraava [ 2 .. ] missä seuraava ( x : xs ) = x : seuraava [ y | y <- xs , rem y x /= 0 ]Tämä toiminto (tehottomasti) toteuttaa Divisor Search -algoritmin . [yksi]
Haskellin esimerkit eivät ole täysin oikeita, koska kielessä ei ole koodidata- idiomia . Näissä esimerkeissä koodidataa emuloidaan vain käyttämällä rajoittamatonta ("ääretön") -luetteloa .