我无法在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;;
答案 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
是必要的。