OCaml

时间:2016-08-18 21:12:39

标签: if-statement functional-programming ocaml expected-exception

我无法在Google上找到明确的答案,但似乎在OCaml中不鼓励使用多行if语句(?)我看到的多行似乎包含begin end个关键字。

我目前在num = (num - temp) / 10行上收到此错误,字符25-27:Error: Parse error: "end" expected after [sequence] (in [expr])。如果我删除了所有begin end,那么我会在同一行收到错误Error: This expression has type bool but an expression was expected of type int

let rec reverse_int num =
  if num / 10 == 0 then begin
    num
  end else begin
    let temp = num mod 10 in
    num = (num - temp) / 10

    let numDigits = string_of_int num

    temp * (10 * String.length(numDigits)) + reverse_int num
  end;;

1 个答案:

答案 0 :(得分:2)

您可能意味着以下内容。

let rec reverse_int num =
  if num / 10 == 0 then begin
    num
  end else begin
    let temp = num mod 10 in
    let num = (num - temp) / 10 in

    let numDigits = string_of_int num in

    temp * (10 * String.length(numDigits)) + reverse_int num
end;;

这里的问题:

  • num = (num - temp) / 10是boolean类型的值。您的意思是,您希望在num之后获得(num - temp) / 10并继续评估;因此用let num = (num - temp) / 10 in替换此行。

  • 线  let numDigits = string_of_int num temp * (10 * String.length(numDigits)) + reverse_int num 解析let numDigits = string_of_int num temp *...会产生类型错误,因为函数string_of_int只有一个参数。这里in是必要的。