Herramientas de usuario

Herramientas del sitio


categorias:sin_monadas

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Próxima revisión
Revisión previa
categorias:sin_monadas [2011/11/07 21:08] – creado dfridlendercategorias:sin_monadas [2018/08/10 03:03] (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, antes de evaluar Div +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 
-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 -> Int +
-eval (Val i) = eta +
-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 -> T b +eval (Mas a b) = case eval of 
-t f = \ta -> case ta of +                   Just x -> case eval b of 
-               Just -> Just (f a+                               Just -> Just (x+y
-               Nothing -> Nothing +                               Nothing -> Nothing 
- +                   Nothing -> Nothing 
-eta :: a -> T a +eval (Menos b= case eval a of 
-eta = Just +                   Just x -> case eval b of 
- +                               Just -> Just (x-y) 
-mu :: T (a) -> T a +                               Nothing -> Nothing 
-mu tta = case tta of +                   Nothing -> Nothing 
-           Just ta -> ta +eval (Por a b) = case eval a of 
-           Nothing -> Nothing +                   Just x -> case eval b of 
- +                               Just y -> Just (x*y) 
-div0 :: T a +                               Nothing -> Nothing 
-div0 = Nothing +                   Nothing -> Nothing 
- +eval (Div a b) = case eval a of 
-eval :: Exp -> T Int +                   Just x -> case eval b of 
-eval (Val i) = eta i +                               Just y -> if y == 0 then Nothing 
-eval (Mas 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) +                   Nothing -> Nothing
-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: 2018/08/10 03:03 (editor externo)