怎么能在无限列表上终止?

时间:2014-12-03 05:01:03

标签: list haskell

如果我takeWhile (<15) [1,3..]怎么能终止? Haskell如何知道列表末尾没有隐藏2个?

一个更好的例子可能是一个sin函数,其中我们的伤口具有无限多的类似值,低于15,可以永远重复。

1 个答案:

答案 0 :(得分:10)

takeWhile (<15)不会所有小于15的值 - 这是filter所做的。相反,takeWhile (<15)获取包含全部小于15的值的列表的最长前缀。一旦遇到项目15或更高,这是最长的前缀,并且它可以停止。

那就是说,你的sin函数的例子确实不会终止,只是因为所有值都小于15.在这种情况下,takeWhile (<15)会产生无限的列表,与其输入相同。