【发布时间】:2011-02-04 10:55:51
【问题描述】:
这个矩阵转置函数有效,但我试图逐步理解它的执行,但我不明白。
transpose:: [[a]]->[[a]]
transpose ([]:_) = []
transpose x = (map head x) : transpose (map tail x)
与
transpose [[1,2,3],[4,5,6],[7,8,9]]
它返回:
[[1,4,7],[2,5,8],[3,6,9]]
我不明白串联运算符是如何处理地图的。它在同一个函数调用中连接 x 的每个头部?怎么样?
这是吗
(map head x)
为每个列表的头元素创建一个列表?
【问题讨论】:
-
这不是一个答案,但通常当我试图在 Haskell 中解决某些问题时,我会花一些时间在 GHCi 中玩弄它。在几个列表列表上尝试“map head”或“map tail”,您将亲眼看到它们是如何工作的。如果您来自命令式世界,地图和折叠可能有点难以理解。它们是你的主要循环结构——基本上取代了“for”和“while”——所以你很快就会学会喜欢它们。