如何在Ocaml中循环遍历数组以返回值?

时间:2016-10-15 20:49:38

标签: arrays ocaml

说明

  • 将规范初始化为0.0
  • 循环遍历数组
  • 添加到正方形 当前数组组件
  • return norm

我的代码

type vector = float array
let norm_loop (vector: vector) =
  let norm = ref 0.0 in
  for x = 0 to (Array.length vector) - 1 do
    norm := (!norm +. (vector.(x)*.vector.(x)))
  done in
  norm

但是当我输入uTop时,它说

# let norm_loop (vector: vector) =
      let norm = ref 0.0 in
      for x = 0 to (Array.length vector) - 1 do
        norm := (!norm +. (vector.(x)*.vector.(x)))
      done in
      norm;;
Characters 4-13:
Warning 26: unused variable norm_loop.
- : float ref = {contents = 0.}   

我不知道我为utop做错了什么,认为norm_loop是一个变量。我想做的就是返回norm,但我似乎无法弄清楚如何做到这一点。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

你的第二个in是多余的。没有let与之相关。相反,你应该把它作为最后几行:

done;
!norm

请注意,您正在返回一个引用,但是您想返回一个float(我假设)。因此,您需要编写!norm而不是norm

答案 1 :(得分:3)

请注意,您也可以使用Array.fold_left来获得相同的结果:

let norm (vector : vector) = 
  Array.fold_left (fun acc v -> acc +. v *. v) 0.0 vector