返回单位而不是int数组

时间:2018-02-25 15:11:56

标签: ocaml typeerror

我有以下代码:

let rec dec_to_bin a b c =
  match a with
  | 0 -> b
  | _ -> if a mod 2 = 0 then dec_to_bin (a/2)(b)(c+1) else b.(c) <- 1;dec_to_bin ((a-1)/2)(b)(c+1);;

我收到以下错误:

Error: This expression has type unit but an expression was expected of type
         int array

我认为问题来自于编译器只执行:b.(c) <- 1;,因此认为这是unit类型。 但这是否意味着我不能在模式匹配中执行两件事?

那么我该如何使这段代码工作呢?

1 个答案:

答案 0 :(得分:3)

您的问题是因为if的优先级高于;(您可以通过转到here并稍微向上滚动来查看优先级表)。因此if ... else ...仅被解释为上升到;。如果要将多个“语句”作为else表达式执行,则必须将它们括在括号( ... )begin ... end中(它们是相同的)。