2013-05-04 294 views
4

我想在F#中創建一個函數,它需要輸入一個整數的二維數組(9乘9),然後打印它的內容。下面的代碼顯示我做了什麼:如何將二維數組傳遞給F#中的函數?

let printMatrix matrix= 
    for i in 0 .. 8 do 
     for j in 0 .. 8 do 
      printf "%d " matrix.[i,j] 
     printf "\n" 

的問題是,F#不自動推斷矩陣的類型,它給了我下面的錯誤:‘EXPR [IDX]’「運營商已經在該程序點之前根據信息使用了不確定類型的對象。考慮添加更多類型約束「

我試圖在函數的定義中使用類型註釋,但我認爲我做錯了。任何想法我能如何克服這個問題?

回答

6

將其更改爲

let printMatrix (matrix:int [,])= 
    for i in 0 .. 8 do 
     for j in 0 .. 8 do 
      printf "%d " matrix.[i,j] 
     printf "\n" 

這是由於F#類型infrence算法如何工作

+0

感謝您的幫助:) – John 2013-05-04 07:57:34

1

類型推理算法並沒有真正喜歡的支架運營商,因爲它不能猜測哪些類型是對象。

解決方法是將矩陣賦予編譯器知道類型的函數,在該示例中,Array2D.get與括號運算符做同樣的事情。它知道這是一個int矩陣,因爲printf上的「%d」

let printMatrix matrix = 
    for i in 0..8 do 
     for j in 0..8 do 
      printf "%d" <| Array2D.get matrix i j 
     printf "\n"