1

我有这个简单的功能:

bombplaces::Int->[(Int,Int)]->[(Int,Int)]
bombplaces bombCount listOfPossiblePoints = nub (map (take  bombCount) (perms listOfPossiblePoints))

炸弹是 (x,y) (carthesian 点)

我需要获得所有排列并且只取前几个(bombCount)点。

我收到以下错误:

Couldn't match expected type `(Int,Int)' with actual type `[a0]'
Expected type: [a0] -> (Int,Int)
  Actual type: [a0] -> [a0]
In the return type of a call of `take'
In the first argument of `map', namely `(take liczbaBomb)'
4

1 回答 1

6

如果您删除类型签名并向 GHCi 询问类型,您的问题将很明显:

> :t bombplaces
bombplaces :: Eq a => Int -> [a] -> [[a]]

也就是说,bombplaces想要返回一个列表列表,而您希望它返回一个普通列表。您需要更改类型签名或更改函数的定义,具体取决于您想要的行为。

注意你没有告诉我们perms你使用的是什么定义,所以我假设是显而易见的。

于 2012-07-09T17:53:01.383 回答