我有以下代码:
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
类型。
但这是否意味着我不能在模式匹配中执行两件事?
那么我该如何使这段代码工作呢?
答案 0 :(得分:3)
您的问题是因为if
的优先级高于;
(您可以通过转到here并稍微向上滚动来查看优先级表)。因此if ... else ...
仅被解释为上升到;
。如果要将多个“语句”作为else
表达式执行,则必须将它们括在括号( ... )
或begin ... end
中(它们是相同的)。