你能识别 Haskell 程序中的无限列表吗? [复制]

2024-05-17

可能的重复:
如何判断列表是否是无限的? 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(使用前将#替换为@)

你能识别 Haskell 程序中的无限列表吗? [复制] 的相关文章

  • Haskell 中的所有内容都存储在 thunk 中吗,甚至是简单的值?

    以下值 表达式 函数的 thunk 在 Haskell 堆中是什么样子的 val 5 is val a pointer to a box containing 5 add x y x y result add 2 val main prin
  • 采用迭代器而不是可迭代的方法[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 关于迭代器和可迭代对象 仅是我的观察 如果我错了 请纠正我 大多数构造函数 数组类型 将迭代器作为质量构造函数 迭代器是显式创建的 或
  • 如何从具有函数依赖关系的类型类中获取和使用依赖类型?

    如何从具有函数依赖关系的类型类中获取和使用依赖类型 为了澄清并给出我最近的尝试的一个例子 从我正在编写的实际代码中最小化 class Identifiable a b a gt b where if you know a you know
  • Haskell / cabal 包的解决方法受到 Nix 和 Cabal 的限制?

    我最近开始开发反射平台 https github com reflex frp reflex platform 有一些额外的配置类似于优秀的反射项目骨架 https github com ElvishJerricco reflex proj
  • 创建动态对象

    如何动态创建对象 string columnNames EmpName EmpID PhoneNo List
  • 并行 Haskell - GHC GC 火花

    我有一个正在尝试并行化的程序 带有可运行代码的完整粘贴here http lpaste net 101528 我进行了分析 发现大部分时间都花在findNearest这本质上是一个简单的foldr超过一个大Data Map findNear
  • 如何让 esqueleto 为我生成 SQL 字符串?

    我怎样才能让esqueleto从a生成一个SQL字符串from陈述 的文档toRawSql说 你可以打开持久的查询日志记录 我尝试了所有可能的形式MonadLogger我可以理解 但它从未打印任何 SQL 同一文档还说 手动使用此功能 是可
  • 检索 Haskell 项目中所有导入的列表

    因此 我的最终目标是通过确保项目导入的所有实体都存在于其声称可以使用的版本中 来评估 cabal 文件中依赖项的准确性 一个好的开始是找到单个源文件使用的所有导入实体的列表 可选地包含有关它们来自何处的信息 我愿意暂时忽略类实例的情况 因为
  • Python列表错误还是我错了?

    我构建了一个 3 级嵌套列表 run on Python 3 2 3 32 bit on Win 7 L2 list 0 for i in range 2 L3 list L2 for i in range 3 L4 list L3 for
  • List 或其他类型上的 string.Join

    我想将整数数组或列表转换为逗号分隔的字符串 如下所示 string myFunction List
  • Haskell数据类型转换问题

    我目前正在学习 Haskell 并且一直在编写一些非常简单的程序来练习 我的程序之一是 import System IO main do putStrLn Give me year y lt getLine let res show cal
  • Python 列表切片语法的使用没有明显的原因

    我偶尔会看到 Python 代码中使用的列表切片语法如下 newList oldList 当然 这与以下内容相同 newList oldList 或者我错过了什么 浅拷贝 http en wikipedia org wiki Deep co
  • 为什么 GHC 在这里推断出单态类型,即使禁用了单态限制?

    这是由解析 f f pure 的类型 https stackoverflow com questions 55388119 resolving the type of f f pure 55388309 noredirect 1 comme
  • 如何在Python中反转列表的列表? [复制]

    这个问题在这里已经有答案了 我想知道如何反转 python 中的列表列表 例如 原来的 list 1 2 3 4 5 6 7 8 9 输出 new list 7 8 9 4 5 6 1 2 3 现在 我正在尝试这样做 new list re
  • 在 Haskell 中调试时打印时间戳

    我仍在学习 Haskell 并调试一些函数 并且通常有一个时间戳函数来了解某些操作何时开始和停止 doSomeAction String gt IO doSomeAction arg1 do putStrLn lt lt makeTime
  • Haskell/Idris 中的开放类型级别证明

    在 Idris Haskell 中 可以通过注释类型并使用 GADT 构造函数 例如使用 Vect 来证明数据的属性 但这需要将属性硬编码到类型中 例如 Vect 必须是与 List 不同的类型 是否有可能拥有具有开放属性集的类型 例如同时
  • 承诺的反面是什么?

    承诺代表将来可能可用 或无法实现 的值 我正在寻找的是一种数据类型 它表示将来可能变得不可用的可用值 可能是由于错误 Promise a b TransitionFromTo
  • Vaadin:在表中显示列表

    我需要显示表中列表中包含的所有值 例如 class Person String name String age List
  • 对 Python 列表元素进行分组

    我有一个 python 列表 如下所示 my list 25 1 0 65 25 3 0 63 25 2 0 62 50 3 0 65 50 2 0 63 50 1 0 62 我想根据以下规则对它们进行排序 1 gt 0 65 0 62 l
  • python 中分割字符串以获得一个值?

    需要帮助 假设我在名为 input 的变量中有一个字符串 Sam Person name kind input split 通过执行上述操作 我得到两个具有不同字符串 Sam 和 Person 的变量 有没有办法只获取第一个值 name S

随机推荐