让递归在 Haskell
Let recursiveness in Haskell
有人可以用以下输入解释这段代码的行为吗:[[1,2],[3,4]]
?
infiniteList ls = let v = ls ++ v
in concat v
结果是一个无限列表,但我不明白为什么。我明白诀窍在于:
ls ++ v
但是既然我们没有为变量定义初始值,那么 let 究竟是如何工作的呢v
?
要评估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
显然这永远不会结束。
有人可以用以下输入解释这段代码的行为吗:[[1,2],[3,4]]
?
infiniteList ls = let v = ls ++ v
in concat v
结果是一个无限列表,但我不明白为什么。我明白诀窍在于:
ls ++ v
但是既然我们没有为变量定义初始值,那么 let 究竟是如何工作的呢v
?
要评估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
显然这永远不会结束。