Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

Arvorekursio: monadit solmuun

Samankaltaiset esitykset


Esitys aiheesta: "Arvorekursio: monadit solmuun"— Esityksen transkriptio:

1 Arvorekursio: monadit solmuun
TIES341 Funktio-ohjelmointi 2 Kevät 2006

2 Lisäluettavaa Levent Erkök & John Launchbury: “A recursive do for Haskell”, Proc. ACM SIGPLAN Workshop on Haskell, 2002. Levent Erkök: Value Recursion in Monadic Computations. PhD thesis, Oregon Graduate Institute, 2002.

3 Muistathan solmun solminnan
Esim. ones = 1 : ones Graafinsievennyksessä syntyy syklinen graafi: Miten toimitaan, jos vastaava halutaan tuottaa monadisesti? ones (:) 1

4 Miksi monadista solmintaa?
Ei-monadinen solminta tekee syklisiä graafeja, mutta näitä graafeja ei voi jälkikäteen muuttaa kopioimatta Tietyissä sovelluksissa graafin “in-place” muuttaminen on tarpeen esim. graafinsievennystä itseään toteutettaessa... Joissain tapauksissa on mahdollista rakentaa syklinen graafi ilman solmintaa käytännössä vaatii, että graafiin sijoitetaan “edelleenohjaussolmuja”, jotka kertovat “minä en ole se solmu, jota etsit; se on tuossa vieressä” kömpelöä

5 Laskosrekursio vs arvorekursio
Laskosrekursio: monadinen käsky kutsuu itseään “folding recursion” sivuvaikutukset monistuvat esim. writeString (c:cs) = do putChar c ; writeString cs writeString [] = return () Arvorekursio: monadiset käskyt riippuvat toistensa paluuarvoista (tai omistaan) “value recursion”, solmun solmiminen sivuvaikutukset vain kerran mdo r <- newSTRef (Foo r); return r

6 Arvorekursio Haskellissa
arvorekursio tapahtuu mdo-lohkossa mdo-lohkossa sallitaan samat asiat kuin do-lohkossa: let (mutta vain monomorfinen!) sijoitus x <- e (monadinen) lauseke e mdo-lohkossa sijoitusten määrittelemät muuttujat näkyvät koko lohkossa niitä voidaan käyttää rekursiivisesti mdo on mahdollinen vain niillä monadeilla, jotka kuuluvat MonadFix-tyyppiluokkaan (Control.Monad.Fix) vaatii {-# OPTIONS -fglasgow-exts #-}


Lataa ppt "Arvorekursio: monadit solmuun"

Samankaltaiset esitykset


Iklan oleh Google