2015-04-18 53 views
-1

我遇到了这个实现的问题。它给了我一个错误,“这个表达式具有类型布尔,但这里有单位”在整个块上从第一个for循环开始,并以pown表达式结束。递归计算N×N矩阵行列式

我不完全确定这是什么意思。

let rec detMat (m : int[,]) : int = 
    let mutable det = 0 
    let mutable n = m.Length 
    let mutable i = 0 
    let mutable j = 0 
    let mutable j = 0 
    let mutable j1 = 0 
    let mutable j2 = 0 
    let mTmp = Array2D.create 0 

    if n = 1 then 
     det = m.[0, 0] 
    elif n = 2 then 
     det = m.[0, 0] * m.[1, 1] - m.[1, 0] * m.[0, 1] 
    else 
     det = 0 
     for j1 = 0 to n do 
      for i = 1 to n do 
       j2 = 0 
       for j = 0 to n do 
        if j <> j1 then 
         mTmp.[i-1, j2] <- m.[i, j] 
         j2 = j2 + 1 
      pown -1 (1 + j1 + 1) * m.[0, j1] * detMat(mTmp, n-1) 
    det 
+6

'='是平等比较,'<-'是赋值。 – ildjarn

回答

2

<-是可变变量的赋值运算符。 你的代码应该是

det <- m.[0, 0]

det <- m.[0, 0] * m.[1, 1] - m.[1, 0] * m.[0, 1]

j2 <- j2 + 1

=是平等的,这就是为什么你所得到的 “这句话来有bool类型” 的错误。第二部分,“但这里有单位”,意味着编译器期望if的一个部分返回最后一个表达式中的单位。仔细阅读本页面,了解错误信息为何如此混乱:https://msdn.microsoft.com/en-us/library/dd233231.aspx