mainDiag :: [[a]] -> [a]
mainDiag x = zipWith (!!) x [0..]
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下这段代码(特别是zipWith (!!))以及它如何返回矩阵的对角线?
使用非正式的符号,你可以想象zipWith成这样:
zipWith f [x0,x1,x2,...] [y0,y1,y2,...] = [f x0 y0, f x1 y1, f x2 y2, ...]
Run Code Online (Sandbox Code Playgroud)
在你的情况下,zipWith (!!) x [0..]我们有
x = [x0,x1,x2,...]
[0,1,2,...] = [y0,y1,y2] (that is yn=n for all natural n)
(!!) = f
Run Code Online (Sandbox Code Playgroud)
因此,结果是
[(!!) x0 0, (!!) x1 1, (!!) x2 2, ...]
Run Code Online (Sandbox Code Playgroud)
这也写成
[x0 !! 0, x1 !! 1, x2 !! 2, ...]
Run Code Online (Sandbox Code Playgroud)
此列表包含 list 中位置 0 中的元素,listx0中位置 1中的元素x1,依此类推。因此,这是原始 list-of-lists 的对角线x。
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |