OCaml:为什么我收到此错误?

时间:2017-10-09 17:15:17

标签: compiler-errors ocaml typeerror

我开始学习OCaml语言。你能告诉我为什么这段代码显示错误吗?

let unite x =
  if x < 100 then x mod 10
  else if x >= 100 then x mod 100;;

let dizaine x =
  if x < 100 then x / 10
  else if x >= 10 then unite(x / 10);;

let centaine x =
  if x >= 100 then x / 100;;


let somme_chiffre x =
  if x >= 100 then unite x + dizaine x + centaine x
  else if x > 9 then unite x + dizaine x
  else unite x;;

let div3 x = if ((somme_chiffre x) mod 3) = 0 then 1 else 0;;

print_int(div3 32);;
print_string("\n");;

错误是:文件“./test.ml”,第3行,字符24-33: 错误:此表达式的类型为int,但表达式需要类型          单元

1 个答案:

答案 0 :(得分:4)

if函数的上一个unite没有else部分。您需要else类型的int部分来匹配函数的其余部分。

或者,由于您的两个测试都是详尽且相互排斥的,因此您实际上可以不使用第二个if。这将是一个更整洁的解决方案。

if x < 5 then
    (* x is less than 5 in this branch *)
else
    (* x is >= 5 in this branch *)