功能中的非穷举模式 - 寻找下限

时间:2014-03-28 14:58:03

标签: haskell

我试图通过从矩阵中逐个切割第一列来找到矩阵的转置。好像我要匹配模式“包含包含单个元素的单个数组的数组的数组”。不确定这是否会导致错误。帮我看看我哪里出错了。

    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]]

1 个答案:

答案 0 :(得分:1)

firstCol加载到ghci,我们看到了

λ. :t firstCol
firstCol :: [[a]] -> [a]

但在这种情况下

firstCol [x:[]] = [x]

模式x中的[x:[]]类型为[a],而rhs中的[x]类型为[[a]]。但firstCol必须返回[a],因此类型错误。