list - 让 Haskell 中的递归

标签 list haskell recursion infinite let

有人可以用以下输入解释这段代码的行为吗:[[1,2],[3,4]]

infiniteList ls = let v = ls ++ v
                  in concat v

结果是一个无限列表,但我不明白为什么。我明白诀窍在于:

ls ++ v

但是,既然我们没有为变量 v 定义初始值,那么 let 究竟如何工作呢?

最佳答案

要评估v,只需将其替换为它的定义:

v = ls ++ v
  = ls ++ ls ++ v
  = ls ++ ls ++ ls ++ v
  = ls ++ ls ++ ls ++ ls ++ v
  = ls ++ ls ++ ls ++ ls ++ ls ++ v
  = ls ++ ls ++ ls ++ ls ++ ls ++ ls ++ v

显然,这永远不会结束。

关于list - 让 Haskell 中的递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48138787/

相关文章:

java - 二叉树递归InOrder方法混淆

Linux:递归查找字典中的文件列表

python - 汇总列表的对象

haskell - 如何让 Cabal Sandbox 安装正确链接的 HTML 文档?

file - Haskell 中的二维数组处理

haskell - 如何在不使用(显式)递归的情况下将 Cons 列表转换为 Haskell 列表?

python - 在列表中查找字符串值并替换它们

java - BitSet 在 List、Set 上的用例

返回单个骰子的 Python 骰子类

c++ - 迭代方法似乎比递归实现(硬币找零)慢