Corecursion

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2019. július 16-án felülvizsgált verziótól ; az ellenőrzések 2 szerkesztést igényelnek .

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.

Általános megjegyzések

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éldák

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 .

Lásd még

Jegyzetek

  1. Melissa E., "The Genuine Sieve of Eratosthenes" archiválva 2017. november 9-én a Wayback Machine -nél , Journal of Functional Programming, online közzétette: Cambridge University Press, 2008. október 9. doi:10.1017/S0956796808007004

Irodalom

  • David Turner . Total Functional Programming  //  Journal of Universal Computer Science : folyóirat. - 2004. - július 28. ( 10. évf. , 7. sz.). - P. 751-768 .