使用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