可能的重复:
如何判断列表是否是无限的? https://stackoverflow.com/questions/7371730/how-to-tell-if-a-list-is-infinite
在Haskell中,你可以定义一个无限列表,例如[1..]
。 Haskell 中是否有内置函数来识别列表是否具有有限长度?我不认为可以编写用户提供的函数来执行此操作,但 Haskell 的列表的内部表示可能能够支持它。如果标准 Haskell 中没有,是否有提供此类功能的扩展?
不,这是不可能的。编写这样的函数是不可能的,因为您可以拥有其有限性可能未知的列表:考虑一个递归循环,生成所有列表孪生素数 http://en.wikipedia.org/wiki/Twin_prime它可以找到。或者,为了跟进 Daniel Pratt 在评论中提到的内容,您可以列出所有步骤通用图灵机 http://en.wikipedia.org/wiki/Universal_Turing_machine在其执行期间占用,当机器停止时结束列表。然后,您可以简单地检查这样的列表是否是无限的,并解决停机问题 http://en.wikipedia.org/wiki/Halting_problem!
唯一的问题是实施could答案是列表是否是循环的:如果它的尾指针之一指向列表的前一个单元。然而,这是特定于实现的(Haskell 没有指定任何关于实现必须如何表示值的信息)、不纯粹(编写相同列表的不同方式会给出不同的答案),甚至取决于您传递的列表是否这样的函数已经被评估过。即使如此,在一般情况下它仍然无法区分有限列表和无限列表!
(我提到这一点是因为,在许多语言(例如 Lisp 家族的成员)中,循环列表是唯一的善良无限列表;无法表达“所有整数的列表”之类的内容。所以,在这些语言中,你can检查列表是否是有限的。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)