【发布时间】:2012-04-10 23:21:18
【问题描述】:
在 Haskell 中,您可以定义一个无限列表,例如 [1..]。 Haskell 中是否有内置函数来识别列表是否具有有限长度?我不认为可以编写用户提供的函数来执行此操作,但 Haskell 的列表的内部表示可能能够支持它。如果不在标准 Haskell 中,是否有提供此类功能的扩展?
【问题讨论】:
-
我不这么认为。由于惰性求值,Haskell 运行时真的不知道列表是否是无限的;并不是说它只是不将其暴露给程序。
-
我强烈怀疑这相当于所谓的“停机问题”,在这种情况下,答案将是“否”。
-
如果你希望能够识别无限的结构,你可以阅读一些关于 coduction 的文章:en.wikipedia.org/wiki/Coinduction, disi.unige.it/dottorato/corsi/DPCI2011
-
这是一个永远不会给出错误答案的函数:
isInfinite list = case list of [] -> False; _:rest -> isInfinite rest -
没有“内部表示”,因为列表和其他所有东西一样只是 ADT