OCaml 中多行 if 语句的问题

Trouble with multiline if statments in OCaml

我无法在 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;;

您的意思可能类似于以下内容。

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 是布尔类型的值。您的意思是,您希望 num 具有 new(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是必须的。