5

私は現在、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が、モナドを意味すると思います。したがって、これは、関数がモナドの int を返していることを意味すると思います。この問題とその解決方法を理解するための助けがあれば、非常に高く評価されます。

ありがとう。

4

1 に答える 1