私は現在、Haskellを学ぶのに苦労しています。次の関数:
findPivot :: [[Double]] -> Int
findPivot matrixA =
do
let firstCol = (transpose(matrixA)!!0)
let maxColValue = maximum firstCol
let pivotIndex = elemIndex maxColValue firstCol
return (fromJust(pivotIndex))
行列を表すdoubleの2Dリストを取得し、最初の列で最大値を持つ行を決定することになっています。マトリックスを表すためのリストの使用や転置の使用など、いくつかの非効率的な部分があることは知っていますが、私が直面している問題には、次のコンパイラエラーが含まれます。
Couldn't match expected type `Int' with actual type `m0 Int'
In the return type of a call of `return'
In a stmt of a 'do' block: return (fromJust (pivotIndex))
In the expression:
do { let firstCol = (transpose (matrixA) !! 0);
let maxColValue = maximum firstCol;
let pivotIndex = elemIndex maxColValue firstCol;
return (fromJust (pivotIndex)) }
m0
意味はわかりませんが、モナドを意味すると思います。つまり、これは関数がモナド整数を返していることを意味していると思います。この問題とそれを解決する方法を理解する上での助けは非常にありがたいです。
ありがとう。
do
そしてreturn
モナドに関連しています。それらを使用するときは、モナドを使用するつもりであることをコンパイラーに伝えます。
関数型は非モナドです。これは、モナドを使用するつもりがないことをコンパイラーに通知します。コンパイラは、この不一致について警告しているだけです。
のlet
外で使用できますdo
が、構文は少し異なります
findPivot matrixA =
let
firstCol = (transpose(matrixA)!!0)
maxColValue = maximum firstCol
pivotIndex = elemIndex maxColValue firstCol
in fromJust(pivotIndex)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加