1

私はこの単純な機能を持っています:

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

爆弾は (x,y) (デカルト ポイント)

すべての順列を取得し、最初の数 (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 に答える