Duda en diapositiva de Mónadas - Evaluador con fallas (4)

Duda en diapositiva de Mónadas - Evaluador con fallas (4)

de Hugo Sebastian Rodriguez Reyes -
Número de respuestas: 7

Buenas, tengo una duda en donde dice:

Entonces, 

eval :: Exp → Maybe Int

eval (Num n) = return n

eval (Add x y) = eval x >>= λa → eval y >>= λb → return (a + b)

eval (Div x y) = eval x >>= λa → eval y >>= λb → a ‘divM‘ b

La pregunta es:

Qué pasa si lo que está en negrita devuelve Nothing?

En respuesta a Hugo Sebastian Rodriguez Reyes

Re: Duda en diapositiva de Mónadas - Evaluador con fallas (4)

de Juan Pablo García Garland -
La implementación del operador bind (>>=) para la instancia de Maybe es:



instance Monad Maybe where
  ...
  Nothing >>= _ = Nothing
  ...


En caso de que "eval x" devolviese nothing, toda la computación devuelve Nothing. La intuición es que si falló la evaluación de x, falla luego la evaluación de la expresión que usa x como subexpresión. Fijate que la semántica es la misma a la del ejemplo original no monádico. En vez de gestionar los efectos (en este caso la falla) "a pedal" nos abstraemos, usamos la interfaz monádica y es la implementación del bind la que se encarga.
En respuesta a Juan Pablo García Garland

Re: Duda en diapositiva de Mónadas - Evaluador con fallas (4)

de Hugo Sebastian Rodriguez Reyes -

Perfecto, muchas gracias por la respuesta.

Saludos!

En respuesta a Hugo Sebastian Rodriguez Reyes

Re: Duda en diapositiva de Mónadas - Evaluador con fallas (4)

de Sandra Paganini Fajardo -

Hola, buenas noches. 

He probado en haskell estos ejemplos pero no se como pasarle nothing a las funciones. 

Si divino entre 0 me devuelve nothing, pero como llamo al add con nothing? 

gracias, slds

sandra 


En respuesta a Sandra Paganini Fajardo

Re: Duda en diapositiva de Mónadas - Evaluador con fallas (4)

de Marcos Viera - InCo -

Puede ser, por ejemplo:

eval (Add (Div (Num 1) (Num 0)) (Num 4))


En respuesta a Marcos Viera - InCo

Re: Duda en diapositiva de Mónadas - Evaluador con fallas (4)

de Sandra Paganini Fajardo -

Hola,


el caso de DIV si funciono y me devolvio nothing, el tema es con ADD

no se como hacer para que x salga por nothing.

gracias, slds

sandra


En respuesta a Sandra Paganini Fajardo

Re: Duda en diapositiva de Mónadas - Evaluador con fallas (4)

de Marcos Viera - InCo -

Es lo que puse en mi ejemplo, un Add que tiene una subexpresión que genera un Nothing, debido a una división por cero.