【发布时间】:2012-12-26 02:18:43
【问题描述】:
关注foldl'是foldl的严格版。
但我很难理解,strict 是什么意思??
foldl f z0 xs0 = lgo z0 xs0
where
lgo z [] = z
lgo z (x:xs) = lgo (f z x) xs
foldl' f z0 xs0 = lgo z0 xs0
where lgo z [] = z
lgo z (x:xs) = let z' = f z x in z' `seq` lgo z' xs
【问题讨论】:
-
对比一下两个版本的foldl的源码,你可能会有所启发。
-
@augustss 也许,你能回答这个问题吗?
-
如您所见, foldl' 在调用之前计算 lgo 的第一个参数,而 foldl 将(通常)传递一个 thunk,该thunk 将在需要时进行评估。
标签: lazy-evaluation haskell strictness