小编Abh*_*hik的帖子

关于懒惰的困惑

我有一个功能

myLength = foldl (\ x _ -> x + 1) 0
Run Code Online (Sandbox Code Playgroud)

在堆栈溢出时失败,输入大约10 ^ 6个元素(myLength [1..1000000]失败).我相信这是因为当我用foldl'替换foldl时,thunk积累,它起作用.到现在为止还挺好.

但现在我有另一个功能来反转列表:

myReverse = foldl (\ acc x -> x : acc) []
Run Code Online (Sandbox Code Playgroud)

它使用懒惰版本foldl(而不是 foldl')

当我这样做 myLength . myReverse $ [1..1000000].这次它运作正常.我不明白为什么foldl适用于后一种情况而不适用于前者?

为了澄清这里myLength使用foldl',而myReverse使用foldl

haskell functional-programming lazy-evaluation

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