2016-05-05 10 views
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 
+2

それをどのように呼びますか?それぞれの機能をテストしましたか? –

+2

'dethelper vec mat n + 1'は'(dethelper vec mat n)+ 1'を 'dethelper vec mat(n + 1)'とは意味しません。 – user2407038

+0

@ user2407038うん、それだった。愚かな間違い、ありがとう! –

答えて

1

dethelper vec mat n+1あなたの考え方はうまくいかない。それは(dethelper vec mat n)+1のように解析されます。私はあなたが実際にほしいと思うdethelper vec mat (n+1)

関連する問題