use*_*212 4 haskell list-comprehension list
我有这个haskell功能,我不太明白.
ns :: [Integer]
ns = 0 : [n+k | (n, k) <- zip ns [1,3..]]
Run Code Online (Sandbox Code Playgroud)
我被要求"需要3 ns".
我认为ns是常量所以它只会用列表的第一个元素压缩,给出(0,1).然后当添加时给出1的答案.然后它说"需要3 ns",所以我用列表的前5个元素压缩0,给出...(0,1),(0,3),(0,5 )然后在添加时,我得到[1,3,5]的最终答案.然而,这不是正确的答案.
ns真正发生了什么?我很难理解......
haskell很懒,所以你可以有递归定义.在这里布局.
ns = 0 : something
(n,k) <- zip (0 : something ) [1,3,5,7...]
(n,k) <- [(0,1) : something )
ns = 0 : 1 : something
(n,k) <- zip ( 0 : 1 : something ) [3,5,7...]
(n,k) <- (0,1) : (1,3) : something
ns = 0 : 1 : 4 : something
(n,k) <- zip ( 0 : 1 : 4 : something ) [5,7...]
(n,k) <- (0,1) : (1,3) : (4,5) : something
ns = 0 : 1 : 4 : 9 : something
....
Run Code Online (Sandbox Code Playgroud)
看看我们如何确定下一个元组是什么然后添加它的两个元素.这允许我们确定下一个元素.
| 归档时间: |
|
| 查看次数: |
187 次 |
| 最近记录: |