小编dsa*_*man的帖子

对 Haskell 中 Do 语句中的箭头感到困惑

我正在努力理解Statemonad,并编写了著名的斐波那契数列的两个简单版本来记忆该函数。let体内的那只跑的很慢。那个<-跑得很快。我的问题:为什么?<-在允许M.lookup通孔Data.Map工作的同时,是否让以某种方式引起全面评估?

-- using state monad and let

-- very slow

fibLet :: Int -> State (M.Map Int Integer) Integer
fibLet n = do
   case n of 0 -> return 0
             1 -> return 1
             n -> do 
                  mp <- get
                  if M.member n mp 
                  then return $ fromJust (M.lookup n mp)
                  else do
                       let s1 = evalState (fibLet (n - 1)) mp                        
                       let s2 = evalState (fibLet (n …
Run Code Online (Sandbox Code Playgroud)

monads haskell memoization state-monad

21
推荐指数
1
解决办法
928
查看次数

标签 统计

haskell ×1

memoization ×1

monads ×1

state-monad ×1