2013-05-04 112 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" 
相关问题