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