我有一个功能
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