【发布时间】:2018-04-27 00:08:15
【问题描述】:
我对 Haskell 执行在无限列表上的确切工作方式有点困惑。例如,考虑下面的sum 函数:
sum (takeWhile (<10000) (filter odd (map (^2) [1..])))
这里是查找小于10000 的所有奇数平方和的代码,我知道这些takewhile、filter、map 函数是如何工作的。我的疑问是,这里map 函数从无限列表中取出一个元素并将其平方并将平方元素列表返回给filter 函数,对吗?在那种情况下,它将无限运行以对无限的元素列表进行平方,不是吗?还是只需要一个元素对其进行平方然后返回filter?
【问题讨论】:
-
Haskell 有无限列表这一事实可能意味着可以用它们做某事,对吧?否则它们将毫无用处。
标签: haskell functional-programming