【发布时间】:2014-12-29 13:33:55
【问题描述】:
我无法理解这个简单的 sn-p 代码:
-- This works: foldr go1 [] [1..]
-- This doesn't: foldr go2 [] [1..]
go1 a b = a : b
go2 a [] = a : []
go2 a b = a : b
与go1 折叠立即开始返回值,但go2 似乎正在等待列表的结尾。
显然,模式匹配导致处理方式不同。有人能解释一下这里到底发生了什么吗?
【问题讨论】:
-
感谢大家的出色回答。如果我可以选择多种解决方案,我会选择的,因为它们都帮助我理解了这个概念。
-
除了“选择”一个答案之外,您还可以投票给那些您认为“有帮助”的答案(当您将鼠标悬停在向上箭头上方时会这样说)。 :)
标签: list haskell lazy-evaluation infinite fold