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

use*_*545 1 haskell list

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

一个更好的例子可能是一个sin函数,其中我们的伤口具有无限多的相似值,在15以下将永远重复.

ick*_*fay 10

takeWhile (<15)并没有把所有的值都小于15 - 那是什么filter.而是takeWhile (<15)采用包含值小于15的列表的最长前缀.一旦遇到15或更高的项目,这是最长的前缀,它可以停止.

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