我的教授给了我以下任务:
data Expr = Num Double | Add Expr Expr
evalDo :: Expr -> Maybe Double
evalDo (Num a) = if a < 0 then Nothing else return a
evalDo (Add a b) = do
x <- evalDo a
y <- evalDo b
return (x + y)
仅使用(>>=(和lambda表达式重写此函数
这是我要使用的模板:
evalBd :: Expr -> Maybe Double
evalBd (Num a) = if a < 0 then Nothing else return a
evalBd (Add a b) = _____ a >>= _____ _____ -> _____ _____ >>= b' -> _____ (a' + _____ )
空白必须填写。我的想法是。。。
evalBd (Add a b) = evalBd a >>= b' _____ -> _____ _____ >>= b' -> return (a' + b' )
但是我无法解开这个谜
我下个薄弱环节要考这个题目。
一旦你得到它,就很简单了。我不会给你确切的答案,而是你需要什么来解决它。以下是你需要知道的:
do e1 ; e2
与e1 >> e2
相同do x <- e1; e2
与e1 >>= x -> e2
相同
我强烈建议你阅读monad,可能是Haskell的wikibook。