【发布时间】:2012-05-02 16:39:30
【问题描述】:
好的,基本上我不知道选项 1 或 2 是否适用于以下情况:
naturals = 0 : map (+ 1) naturals
选项在哪里:
1.执行很糟糕,每一步都重新计算:
naturals = [0]
naturals' = 0:map (+ 1) [0] // == [0, 1]
naturals'' = 0:map (+ 1) [0, 1] // == [0, 1, 2]
naturals''' = 0:map (+ 1) [0, 1, 2] // == [0, 1, 2, 3]
naturals'''' = 0:map (+ 1) [0, 1, 2, 3] // == [0, 1, 2, 3, 4]
2。执行并不糟糕,列表总是无限的,map 只应用一次
naturals = 0:something
|
naturals' = 0: map (+ 1) (0: something)
|
naturals'' = 0:1: map (+ 1) (0:1: something')
|
naturals''' = 0:1:2: map (+ 1) (0:1:2: something'')
|
naturals'''' = 0:1:2:3:map (+ 1) (0:1:2:3:something''')
| 表示 map 在其执行中的位置。
我确实知道答案可能只有 1 或 2 但我也希望能提供一些关于共同递归的良好解释的指针,以消除最后的疑虑 :)
【问题讨论】: