3

我无法在 Google 上找到明确的答案,但在 OCaml 中似乎不鼓励使用多行 if 语句(?)我看到的多行 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;;
4

1 回答 1

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;;

这里的问题:

  • linenum = (num - temp) / 10是一个布尔类型的值。您的意思是,您希望在接下来的内容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是必要的。

于 2016-08-18T23:33:00.277 回答