有人可以用以下输入来解释这一小段代码的行为吗:[[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
显然,这永远不会结束。