【问题标题】:Modify a matrix in ocaml修改ocaml中的矩阵
【发布时间】:2015-06-16 05:29:28
【问题描述】:

我想编写一个函数来修改矩阵中的每个元素。 但是我在编译时遇到了一些问题。

警告 10:此表达式应具有 unit 类型。

我认为因为ocaml中的所有函数都需要返回一个值或单位,所以如果我在一个函数中实现两个任务,是不能接受的。 请帮我修复它。

let nomalize_matrix d a x = 
 for i = 1 to d do 
      for j = 1 to d do
          let n = i*j in
          x.(i)(j) = sprintf "%s_%d" a n
      done
  done;
x;;

【问题讨论】:

    标签: matrix ocaml


    【解决方案1】:

    在表达式中,OCaml 中的= 运算符是一个比较运算符,用于测试是否相等。要分配给数组,请使用 <- 运算符。

    编译器抱怨是因为你的表达式类型为bool(即比较的结果)。 for 中的表达式应具有 unit 类型,因为它的返回值被忽略。实际上,<- 运算符返回单位值()。

    要访问二维数组的元素,语法如下:x.(i).(j)。注意额外的点,不在您的代码中。

    在一个函数中做两件事通常没有问题。如果第一个表达式的类型为unit,则可以用; 分隔两个表达式。结果是第二个表达式的值。你的代码在这方面是可以的。

    【讨论】:

    • 非常感谢。你是对的,这个运营商是个问题。它已修复并且运行良好。
    【解决方案2】:

    当您从数组中设置一项时,请注意不要使用运算符“=”,而是使用运算符“

    let nomalize_matrix d a x = 
     for i = 1 to d do 
          for j = 1 to d do
              let n = i*j in
              x.(i)(j) <- sprintf "%s_%d" a n
          done
      done;
    x;;
    

    【讨论】:

      猜你喜欢
      • 2017-09-10
      • 1970-01-01
      • 2020-03-03
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 2016-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多