【发布时间】:2011-05-09 04:35:20
【问题描述】:
在以下代码中:
ismaxl :: (Ord a) => [a] -> a -> Bool
ismaxl l x = x == maxel
where maxel = maximum l
main = do
let mylist = [1, 2, 3, 5]
let ismax = ismaxl mylist
--Is each call O(1)? Does each call remember maxel?
let c1 = ismax 1
let c2 = ismax 2
let c3 = ismax 3
let c5 = ismax 5
putStrLn (show [c1, c2, c3, c5])
偏函数是max,计算maxel吗?特别是,有人可以指出关于 Haskell 中部分函数复杂性的规则吗?编译器必须在上面的例子中只调用一次最大值吗?换句话说,部分函数是否保留了对内部 where 子句的先前调用的引用?
我有一些受 CPU 限制的代码执行不可接受,我正在寻找可能的错误,以推理复杂性。
【问题讨论】:
-
个人资料。个人资料个人资料。
-
让我补充一下@delnan 所说的suggesting that you profile the code。
-
从什么时候开始在 Haskell 中定义性能?也许你的意思是 Haskell 的一些实现。
标签: performance haskell profiling lazy-evaluation partial-application