如果我takeWhile (<15) [1,3..]
怎么能终止? Haskell如何知道列表末尾没有隐藏2个?
一个更好的例子可能是一个sin函数,其中我们的伤口具有无限多的类似值,低于15,可以永远重复。
答案 0 :(得分:10)
takeWhile (<15)
不会所有小于15的值 - 这是filter
所做的。相反,takeWhile (<15)
获取包含全部小于15的值的列表的最长前缀。一旦遇到项目15或更高,这是最长的前缀,并且它可以停止。
那就是说,你的sin
函数的例子确实不会终止,只是因为所有值都小于15.在这种情况下,takeWhile (<15)
会产生无限的列表,与其输入相同。