0
我有此代碼的問題:Couln't匹配類型
rango2 :: Int -> [Int] -> [[Int]] -> [Int]
rango2 a b list = if (verif (map(+list!!a!!2)(list!!a)) (map(-list!!a!!2)(list!!a)) (b)) then [1]
else [0]
verif :: [Int] -> [Int] -> [Int] -> Bool
verif a b c = if ((c!!0 < ((a!!0)+1)) && (((c!!0)+1) > b!!0) && (c!!1 < ((a!!1)+1)) && (((c!!1)+1) > b!!1)) then True
else False
運行時,它會產生這樣的錯誤:
Couldn't match type `Int' with `Int -> Int'
Expected type: [[Int -> Int]]
Actual type: [[Int]]
In the first argument of `(!!)', namely `list'
In the first argument of `(!!)', namely `list !! a'
In the expression: list !! a !! 2
['map'](http://hackage.haskell.org/package/base-4.7.0.1/docs/Prelude.html#v:map)需要兩個參數,其中第一個參數是一個函數。你似乎在'rango2'中傳遞了三個參數。 –
你到處使用'x !! 0'這一事實可能表明你最好由[基本的haskell教程](http://learnyouahaskell.com/)提供。 – user2407038
@ user2407038:雖然'!! 0'確實不是慣用的,它並不比'頭部'更糟糕,它(雖然通常被皺眉)有時是合理的使用。真正糟糕的是(儘管如此,有時可以批准)將索引列入更大的索引:它不僅不安全,而且效率低下。而這些「魔術指數」'!! 2'也有不同的原因:可讀性,類型推理,重構魯棒性......很可能,許多OP的列表應該更好地成爲有意義的ADT。 – leftaroundabout