相关疑难解决方法(0)

懒惰评估 - 空间泄漏

使用Haskell进行功能性思考提供了以下用于计算Float列表平均值的代码.

mean :: [Float] -> Float
mean [] = 0
mean xs = sum xs / fromIntegral (length xs)
Run Code Online (Sandbox Code Playgroud)

Richard Bird教授评论道:

现在我们已经准备好了解真正意义上的错误:它有空间泄漏.评估mean [1..1000]将导致列表在求和后被扩展并保留在内存中,因为有一个指向它的第二个指针,即计算其长度.

如果我没有理解这段文字,他说,如果没有指针xs的长度计算,那么xs内存可能已经被释放计算的sum

我的困惑是 - 如果xs已经在内存中,那么length功能是不是只使用已经被占用的相同内存?

我不明白这里的空间泄漏.

haskell

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

标签 统计

haskell ×1