无法弄清楚为什么模式匹配不起作用!我从 Hasklell 开始,所以请耐心等待!
-- matrix implemented as a list of lists (rows of the matrix)
test_matrix3 = [[1,0,0],[2,-3,0],[4,5,6]]
-- transpose of a given matrix
transpose (x:[]) = [x]
transpose all@(x:_) = map head all : transpose ([tail y | y <- all])
执行:
*Main> transpose test_matrix3
[[1,2,4],[0,-3,5],[0,0,6],[*** Exception: Prelude.head: empty list
请您参考如下方法:
transpose [[1,0,0],[2,-3,0],[4,5,6]]
= [1,2,4] : transpose [[0,0],[-3,0],[5,6]]
= [1,2,4] : [0,-3,5] : transpose [[0],[0],[6]]
= [1,2,4] : [0,-3,5] : [0,0,0] : transpose [[],[],[]]
这就是它发生的地方。这与第一个模式不匹配,因为它不是一个单例列表——它是一个包含三个元素的列表。所以:
= [1,2,3] : [0,-3,5] : [0,0,0] : map head [[],[],[]] : transpose (map tail [[],[],[]])
这会给每个空列表一个错误,因为 head
和 tail
都没有在空列表上定义。