我试图通过从矩阵中逐个切割第一列来找到矩阵的转置。好像我要匹配模式“包含包含单个元素的单个数组的数组的数组”。不确定这是否会导致错误。帮我看看我哪里出错了。
module Main(main) where
import System.IO
firstCol [[]] = []
firstCol ((x:xy):xs) = [x] ++ firstCol xs
--firstCol [x:[]] = [x] -- not working
firstCol [x:xy] = [x]
--firstCol [x] = [x]
restCols [x:xy] = [xy]
restCols ((x:xy):xs) = [xy] ++ restCols xs
zipz [[]] = [[]]
zipz (xs) = [firstCol xs] ++ (zipz $ restCols xs)
main = do
print $ zipz [[1,2,3],[2,4,5],[5,6,7]]
答案 0 :(得分:1)
将firstCol
加载到ghci
,我们看到了
λ. :t firstCol
firstCol :: [[a]] -> [a]
但在这种情况下
firstCol [x:[]] = [x]
模式x
中的[x:[]]
类型为[a]
,而rhs中的[x]
类型为[[a]]
。但firstCol
必须返回[a]
,因此类型错误。