【发布时间】:2013-05-01 06:07:05
【问题描述】:
我在 Haskell 中有一个二维列表 [[Int]],我想检查两件事:
- 列表的列数是否相同
- 行的元素数量是否相同
例如:
[[1,2,3], [1,55,9]] 的行数与列数相同——此处为 2——每行的元素数相同,即 3。
但是
[[1,2], [1,55], [4,7]] 在每行中具有相同数量的元素,尽管它的行数和列数不相等,即 3r 2c。
又一个例子:
[[1,2], [1,55], [4,7,8]] 的行数与列数都不相同,每行的元素数也不相同。
其实第一步包括第二步,对吗?
我的尝试:
所以到目前为止我尝试的是这样的:
listIsEqual :: [[Int]] -> Bool
listIsEqual myList = (all (\x -> length x == (length myList)) )
现在我收到以下错误消息:
Couldn't match expected type `Bool' with actual type `[a0] -> Bool'
In the return type of a call of `all'
Probable cause: `all' is applied to too few arguments
In the expression: (all (\ x -> length x == (length myList)))
In an equation for `listIsEqual':
listIsEqual myList = (all (\ x -> length x == (length myList)))
谁能告诉我问题出在哪里?
还有其他方法可以解决这个问题吗?
【问题讨论】:
-
好吧,如果你的数据的形状是一个常规的多维数组,我认为你应该尝试使用数组类型而不是
[[a]];这样,数据类型可以保证始终满足形状。 Look here.
标签: arrays list haskell equality