0
私は自分自身をハスケル学習しており、1つの練習では行列の行列式を計算する必要があります。私はそれを行う数学的方法をリフレッシュし、コードでそれをエミュレートしましたが、何らかの理由で無限にループしています。私は何時間もGHCiに何かを入力していますが、何が原因かを突き止めようとしていますが、見つけられません。私のハスケルコードで無限ループを見つけることができません
type Vector = [Float]
type Matrix = [Vector]
determinant :: Matrix -> Float
determinant [] = 0
determinant [[a,b],[c,d]] = (a*d) - (b*c)
determinant (vec:mat) = dethelper vec mat 0
dethelper :: Vector -> Matrix -> Int -> Float
dethelper vec mat n
| vec == [] = 0
| n == length vec = 0
| even n = (vec!!n * (determinant $ map (dropAt n) mat)) - (dethelper vec mat n+1)
| otherwise = (vec!!n * (determinant $ map (dropAt n) mat)) + (dethelper vec mat n+1)
dropAt :: Int -> Vector -> Vector
dropAt x xs = (fst spl) ++ (tail $ snd spl)
where spl = splitAt x xs
それをどのように呼びますか?それぞれの機能をテストしましたか? –
'dethelper vec mat n + 1'は'(dethelper vec mat n)+ 1'を 'dethelper vec mat(n + 1)'とは意味しません。 – user2407038
@ user2407038うん、それだった。愚かな間違い、ありがとう! –