[英]Haskell how to generate this infinite list?
以下應該給你想要的結果:
nats = 1 : map (+1) nats
或者,更具有慣用力:
nats = iterate (+1) 1
通過使用等式推理,很容易看出為什么第一個片段的評估結果為[1,2,3...]
:
nats = 1 : map (+1) nats
= 1 : map (+1) (1 : map (+1) nats)
= 1 : map (+1) (1 : map (+1) (1 : map (+1) nats))
= 1 : 1 + 1 : 1 + 1 + 1 : ....
= [1,2,3...]
是。
考慮如何寫出列表中的每個元素:
1
1 + 1
1 + 1 + 1
1 + 1 + 1 + 1
1 + 1 + 1 + 1 + 1
每次輸入后,每個后續條目都會額外加+ 1
。 所以我們想從1
開始,然后在每個后續元素中加1
。 然后我們想要獲取第二個元素並在之后的所有內容中添加1
。
以下是我們如何做到這一點:
let xs = 1 : map (+ 1) xs
這擴展如下:
1 : map (+ 1) xs
1 : (1 + 1) : map (+ 1) xs
1 : (1 + 1) : ((1 + 1) + 1) : map (+ 1) xs
等等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.