我试图理解懒惰和seq
Haskell:
在(1)中,v
在基本情况下的打印需要之前不进行评估是否正确v
?
在(2)中,v'
在每次递归调用之前评估是否正确,以便v
在基本情况下不需要评估?如果没有,我如何实施这种严格的评估?
我可以使用任何分析工具来为自己确认这两点吗?
main = do
f [1, 2, 3, 4] 0
f' [1, 2, 3, 4] 0
g x = 42 * x -- this could be whatever
-- 1. lazy
f [] v = print v -- base case
f (x:xs) v = f xs v'
where v' = v + g x
-- 2. strict
f' [] v = print v -- base case
f' (x:xs) …
Run Code Online (Sandbox Code Playgroud)