我正在学习自己的Haskell,对于一次练习,我必须计算矩阵的行列式。我刷新了数学方法,并在代码中对其进行了仿真,但是由于某种原因,它无限循环。数小时以来,我一直在向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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句