让递归在哈斯克尔



有人可以用以下输入来解释这一小段代码的行为吗:[[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

显然,这永远不会结束。

相关内容

  • 没有找到相关文章

最新更新