小编Man*_*lVS的帖子

在Haskell中缓存了哪些函数?

我有以下代码:

memoize f = (map f [0 ..] !!)

fib' 0 = 1
fib' 1 = 1
fib' n = fib' (n - 1) + fib' (n - 2)

fibMemo n = memoize fib' n
fibMemo'  = memoize fib'
Run Code Online (Sandbox Code Playgroud)

(我知道斐波纳契实现具有指数时间复杂度并且不使用缓存)

我第一次执行fibmemo' 30它需要3秒,第二次需要~0秒,因为结果是缓存的.但是第一个版本fibmemo没有得到缓存的结果,它总是需要3秒才能执行.唯一的区别是定义(据我所知,这是相同的).

所以我的问题是,在Haskell中缓存了哪些函数?

我已经阅读了https://wiki.haskell.org/Memoization并且没有解决我的问题.

caching haskell memoization

6
推荐指数
1
解决办法
141
查看次数

Haskell中MonadPlus的默认类型评估是什么?

我有以下代码:

import Control.Monad

coin :: MonadPlus m => m Int
coin = return 0 `mplus` return 1
Run Code Online (Sandbox Code Playgroud)

如果我对coin :: Maybe Int解释器进行评估,它会受到影响Just 0.这是正常的,因为Maybe的实现是MonadPlus的实例.

如果我coin :: [Int]在解释器上进行评估,则打印出来[0, 1],因为mplus列表的实现是一个append.

但如果我评估coin,没有任何类型装饰器,它打印0.为什么?口译员"转换"什么类型coin来评估它?

此代码摘自:http://homes.sice.indiana.edu/ccshan/rational/S0956796811000189a.pdf

monads haskell non-deterministic

6
推荐指数
1
解决办法
118
查看次数