如何在F#中将二维数组传递给函数?

4
我将尝试创建一个在F#中的函数,其输入为一个二维整数数组(9x9),并打印其内容。下面是我实现的代码:
let printMatrix matrix=
    for i in 0 .. 8 do
        for j in 0 .. 8 do
            printf "%d " matrix.[i,j]
        printf "\n"

问题在于 F# 无法自动推断矩阵的类型,并显示以下错误:"The operator 'expr.[idx]' has been used an object of indeterminate type based on information prior to this program point. Consider adding further type constraints"
我试图在函数定义中使用类型注释,但是我认为我做错了。有什么想法可以解决这个问题吗?
2个回答

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#类型推断算法的工作方式所致。

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"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接