如果我有takeWhile (<15) [1,3..]这个如何终止?Haskell如何知道列表末尾没有隐藏2个?
一个更好的例子可能是一个sin函数,其中我们的伤口具有无限多的相似值,在15以下将永远重复.
ick*_*fay 10
takeWhile (<15)并没有把所有的值都小于15 - 那是什么filter.而是takeWhile (<15)采用包含值小于15的列表的最长前缀.一旦遇到15或更高的项目,这是最长的前缀,它可以停止.
也就是说,你的sin函数示例确实不会终止,因为所有值都小于15.在这种情况下,takeWhile (<15)会生成一个无限列表,与其输入相同.