categorias:sin_monadas
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Próxima revisión | Revisión previa | ||
| categorias:sin_monadas [2011/11/07 18:08] – creado dfridlender | categorias:sin_monadas [2025/11/15 13:47] (actual) – editor externo 127.0.0.1 | ||
|---|---|---|---|
| Línea 5: | Línea 5: | ||
| | Div Exp Exp | | Div Exp Exp | ||
| - | -- Monada | + | {- antes de Div |
| - | + | eval :: Exp -> Int | |
| - | {- Con la monada identidad, | + | eval (Val i) = i |
| - | type T a = a | + | eval (Mas a b) = eval a + eval b |
| - | + | eval (Menos a b) = eval a - eval b | |
| - | t :: (a -> b) -> T a -> T b | + | eval (Por a b) = eval a * eval b |
| - | t f = f | + | eval (Div a b) = eval a `div` eval b |
| - | + | ||
| - | eta :: a -> T a | + | |
| - | eta a = a | + | |
| - | + | ||
| - | mu :: T (T a) -> T a | + | |
| - | mu tta = tta | + | |
| - | + | ||
| - | eval :: Exp -> T Int | + | |
| - | eval (Val i) = eta i | + | |
| - | eval (Mas a b) = mu $ t (\x -> mu $ t (\y -> eta (x+y)) (eval b)) (eval a) | + | |
| - | eval (Menos a b) = mu $ t (\x -> mu $ t (\y -> eta (x-y)) (eval b)) (eval a) | + | |
| - | eval (Por a b) = mu $ t (\x -> mu $ t (\y -> eta (x*y)) (eval b)) (eval a) | + | |
| -} | -} | ||
| - | type T a = Maybe a | + | eval :: Exp -> Maybe Int |
| - | + | eval (Val i) = Just i | |
| - | t :: (a -> b) -> T a -> T b | + | eval (Mas a b) = case eval a of |
| - | t f = \ta -> case ta of | + | Just x -> case eval b of |
| - | | + | |
| - | | + | |
| - | + | Nothing | |
| - | eta :: a -> T a | + | eval (Menos a b) = case eval a of |
| - | eta = Just | + | Just x -> case eval b of |
| - | + | | |
| - | mu :: T (T a) -> T a | + | |
| - | mu tta = case tta of | + | |
| - | | + | eval (Por a b) = case eval a of |
| - | | + | |
| - | + | Just y -> Just (x*y) | |
| - | div0 :: T a | + | Nothing |
| - | div0 = Nothing | + | |
| - | + | eval (Div a b) = case eval a of | |
| - | eval :: Exp -> T Int | + | |
| - | eval (Val i) = eta i | + | |
| - | eval (Mas a b) = mu $ t (\x -> mu $ t (\y -> eta (x+y)) (eval b)) (eval a) | + | else Just (x `div` y) |
| - | eval (Menos a b) = mu $ t (\x -> mu $ t (\y -> eta (x-y)) (eval b)) (eval a) | + | Nothing -> Nothing |
| - | eval (Por a b) = mu $ t (\x -> mu $ t (\y -> eta (x*y)) (eval b)) (eval a) | + | |
| - | eval (Div a b) = mu $ t (\x -> mu $ t (\y -> if y == 0 then div0 else eta (x `div` y)) (eval b)) (eval a) | + | |
categorias/sin_monadas.1320700081.txt.gz · Última modificación: (editor externo)
