【问题标题】:How to pass two dimensional array to a function in F#?如何将二维数组传递给 F# 中的函数?
【发布时间】:2013-05-04 07:52:16
【问题描述】:

我正在尝试在 F# 中创建一个函数,该函数将一个二维整数数组(9 x 9)作为输入,然后打印其内容。以下代码显示了我所做的:

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在此程序点之前。考虑添加更多类型约束“

我尝试在函数的定义中使用类型注解,但我认为我做错了。知道如何克服这个问题吗?

【问题讨论】:

    标签: arrays function multidimensional-array f# arguments


    【解决方案1】:

    改成

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

    这是由于 F# 类型的无频率算法的工作原理

    【讨论】:

      【解决方案2】:

      类型推断算法不太喜欢括号运算符,因为它无法猜测对象是哪个类型。

      解决方法是将矩阵提供给编译器知道类型的函数,在该示例中,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"
      

      【讨论】:

        猜你喜欢
        • 2020-11-01
        相关资源
        最近更新 更多