De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Compositionaliteit nEen semantiek is compositioneel als de betekenis van een geheel een functie is van de betekenissen van de delen eval (Add x y) = add.

Verwante presentaties


Presentatie over: "Compositionaliteit nEen semantiek is compositioneel als de betekenis van een geheel een functie is van de betekenissen van de delen eval (Add x y) = add."— Transcript van de presentatie:

1 Compositionaliteit nEen semantiek is compositioneel als de betekenis van een geheel een functie is van de betekenissen van de delen eval (Add x y) = add (eval x) (eval y) nEen compositionele semantiek kun je schrijven als fold over de expressie waarbij een algebra vervangingen geeft voor de constructoren

2 Zelfgemaakt datatype voor bomen nMet functies data Tree a = Bin (Tree a) (Tree a) | Leaf a foldTree :: Tree a  b foldTree (b,lf) (Bin le ri) = b (foldTree (b,lf) le) (foldTree (b,lf) ri) foldTree (b,lf) (Leaf x) = lf x bbbbbb (, )  abab foldTree :: (b  b  b, a  b)  Tree a  b foldTree (b,lf) = f where f (Bin le ri) = b (f le) (f ri) f (Leaf x) = lf x

3 Functies op bomen nSpecialisaties: foldTree :: ( b  b  b, a  b )  Tree a  b countLeafs :: Tree a  Int countLeafs = foldTree ( (+), \x  1 ) sumLeafs :: Tree Int  Int sumLeafs = foldTree ( (+), \x  x ) listLeafs :: Tree a  [a] listLeafs = foldTree ( (++), \x  [x] )

4 De essentie van Tree-functies countLeafs :: Tree a  Int countLeafs = foldTree ( (+), \x  1 ) countLeafs :: Tree a  Int countLeafs = foldTree countLeafsFuns countLeafsFuns = ( (+), \x  1 ) countLeafsFuns :: ( Int  Int  Int, a  Int ) countLeafsFuns :: TreeAlgebra a Int type TreeAlgebra a b = ( b  b  b, a  b )

5 Tree, TreeAlgebra en functie foldTree data Tree a = Bin (Tree a) (Tree a) | Leaf a type TreeAlgebra a b = ( b  b  b, a  b ) foldTree :: TreeAlgebra a b  Tree a  b foldTree (b,lf) = f where f (Bin le ri) = b (f le) (f ri) f (Leaf x) = lf x

6 Voorbeelden van TreeAlgebra type TreeAlgebra a b = ( b  b  b, a  b ) countLeafsFuns :: TreeAlgebra a Int countLeafsFuns = ( (+), \x  1 ) sumLeafsFuns :: TreeAlgebra Int Int sumLeafsFuns = ( (+), \x  x ) listLeafsFuns :: TreeAlgebra a [a] listLeafsFuns = ( (++), \x  [x] )

7 Hoofdstuk 8: eenvoudige niet-polymorfe versie data Tree = Leaf Int | Bin Tree Tree type TreeAlgebra b = (Int  b, b  b  b) foldTree :: TreeAlgebra b  Tree  b foldTree (b,lf) = f where f (Leaf x) = lf x f (Bin le ri) = b (f le) (f ri)

8 Publieksvraag nMaak een algebra die het minimum van een Tree bepaalt nMaak een algebra die alle bladeren van een Tree vervangt door 0 (geef ook de types aan) data Tree = Leaf Int | Bin Tree Tree

9 Repmin, versie 1 repmin t = b where b= fold subalg t m= fold minalg t minalg :: Algebra Int minalg =( \x  x, \m1 m2  min m1 m2 ) subalg :: Algebra Tree subalg =( \x  Leaf 0, \b1 b2  Bin b1 b2 ) “pass 1” “pass 2” m

10 Repmin, versie 1  2 repmin t = b where b= fold subalg t m= fold minalg t minalg :: Algebra Int minalg =( \x  x, \m1 m2  min m1 m2 ) subalg :: Algebra Tree subalg =( \x  Leaf m, \b1 b2  Bin b1 b2 ) weg met deze globale variabele!

11 Repmin, versie 1  2 repmin t = b where b= fold subalg t m= fold minalg t minalg :: Algebra Int minalg =( \x  x, \m1 m2  min m1 m2 ) repalg :: Algebra (Int  Tree) repalg =( \x  Leaf m, \b1 b2  Bin b1 b2 ) repalg :: Algebra (Int  Tree) repalg =( \x  \m  Leaf m, \b1 b2  \m  Bin b1 b2 ) repalg :: Algebra (Int  Tree) repalg =( \x  \m  Leaf m, \r1 r2  \m  Bin (r1 m) (r2 m) ) repmin t = r m where r= fold repalg t m= fold minalg t

12 Repmin, versie 2 minalg :: Algebra Int minalg =( \x  x, \m1 m2  min m1 m2 ) repalg :: Algebra (Int  Tree) repalg =( \x  \m  Leaf m, \r1 r2  \m  Bin (r1 m) (r2 m) ) repmin t = r m where r= fold repalg t m= fold minalg t Passes zijn nu onafhankelijk van elkaar!

13 Repmin, versie 2  3 minalg :: Algebra Int minalg =( \x  x, \m1 m2  min m1 m2 ) repalg :: Algebra (Int  Tree) repalg =( \x  \m  Leaf m, \r1 r2  \m  Bin (r1 m) (r2 m) ) repmin t = r m where (m,r)= fold tupalg t één gecombineerde pass met tupelresultaat tupalg :: Algebra ( Int, Int  Tree ) tupalg =( \x , \t1 t2  ) tupalg :: Algebra ( Int, Int  Tree ) tupalg =( \x  ( x, \m  Leaf m ), \t1 t2  ) tupalg :: Algebra ( Int, Int  Tree ) tupalg =( \x  ( x, \m  Leaf m ), \t1 t2  (min m1 m2, \m  Bin (r1 m) (r2 m) ) ) tupalg :: Algebra ( Int, Int  Tree ) tupalg =( \x  ( x, \m  Leaf m ), \t1 t2  let (m1,r1) = t1 (m2,r2) = t2 in (min m1 m2, \m  Bin (r1 m) (r2 m) ) )

14 Repmin, versie 3 repmin t = r m where (m,r)= fold tupalg t tupalg :: Algebra ( Int, Int  Tree ) tupalg =( \x  ( x, \m  Leaf m ), \t1 t2  let (m1,r1) = t1 (m2,r2) = t2 in (min m1 m2, \m  Bin (r1 m) (r2 m) ) ) tupalg :: Algebra ( Int, Int  Tree ) tupalg =( \x  ( x, \m  Leaf m ), \t1 t2  let (m1,r1) = t1 (m2,r2) = t2 in (min m1 m2, \m  Bin (r1 m) (r2 m) ) ) Int  (Int,Tree)

15 Repmin, versie 3  4 repmin t = r m where (m,r)= fold tupalg t meralg :: Algebra (Int  (Int,Tree)) meralg =( \x , \f1 f2  ) repmin t = where f = fold meralg t repmin t = b where f = fold meralg t (m,b) = f m meralg :: Algebra (Int  (Int,Tree)) meralg =( \x  \m , \f1 f2  \m  ) meralg :: Algebra (Int  (Int,Tree)) meralg =( \x  \m  ( x, Leaf m ), \f1 f2  \m  ) meralg :: Algebra (Int  (Int,Tree)) meralg =( \x  \m  ( x, Leaf m ), \f1 f2  \m  ( min m1 m2, Bin b1 b2 ) ) meralg :: Algebra (Int  (Int,Tree)) meralg =( \x  \m  ( x, Leaf m ), \f1 f2  \m  let (m1,b1) = f1 m (m2,b2) = f2 m in ( min m1 m2, Bin b1 b2 ) )


Download ppt "Compositionaliteit nEen semantiek is compositioneel als de betekenis van een geheel een functie is van de betekenissen van de delen eval (Add x y) = add."

Verwante presentaties


Ads door Google