无法弄清楚为什么模式匹配不起作用!我从 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 [[],[],[]]) 

这会给每个空列表一个错误,因为 headtail 都没有在空列表上定义。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!