关于List及其声明的问题(haskell)
我是 Haskell 的新手,我对一个程序有问题。主要问题在于声明,但我不知道如何正确编写。我需要检查矩阵是否是实际矩阵,我的想法是检查第一个列表中的元素数是否等于其他列表中的元素数。
提前致谢!
isMatrix ::[[Int]] -> Bool
isMatrix [] _ = False
isMatrix xs ys | ((len xs) == (len ys)) = True
| otherwise = False
len :: [Int] -> Int
len [] = @
len (_:zs) = 1+ len zs
回答
在您的代码中,您传入isMatrix函数两个参数而不是一个参数,这就是您的代码不起作用的原因。
你可以这样写:
isMatrix :: [[Int]] -> Bool
isMatrix [] = True
isMatrix [_] = True
isMatrix (r1:r2:rs) = len r1 == len r2 && isMatrix (r2:rs)
所以,空矩阵和向量是矩阵。否则,您将一一“删除”行并检查它们的长度是否相同。
PS您可以使用标准功能length代替您的len.