If statement OCaml中的多行if语句有问题

If statement OCaml中的多行if语句有问题,if-statement,functional-programming,ocaml,expected-exception,If Statement,Functional Programming,Ocaml,Expected Exception,我在谷歌上找不到一个明确的答案,但如果OCaml(?)中不鼓励使用多行语句,则似乎是多行的。我看到的多行语句中似乎有开始-结束关键字 我当前在第num=(num-temp)/10行中遇到此错误,字符25-27:错误:解析错误:[sequence](在[expr]中)后应为“end”。如果我删除了所有的begin-end,那么我会得到一个错误error:这个表达式的类型是bool,但是在同一行中应该有一个int类型的表达式 let rec reverse_int num = if num /

我在谷歌上找不到一个明确的答案,但如果OCaml(?)中不鼓励使用多行语句,则似乎是多行的。我看到的多行语句中似乎有
开始-结束
关键字

我当前在第
num=(num-temp)/10行中遇到此错误,字符25-27:
错误:解析错误:[sequence](在[expr]中)后应为“end”
。如果我删除了所有的
begin-end
,那么我会得到一个错误
error:这个表达式的类型是bool,但是在同一行中应该有一个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
    要有新的值
    (num-temp)/10
    ,并继续求值;因此,将这一行替换为
    中的
  • 线条
    让numDigits=string\u of_int num
    temp*(10*字符串长度(numDigits))+reverse_int num
    解析时,让numDigits=string\u of_int num temp*..
产生类型错误,因为函数
string\u of_int
只有一个参数。此处需要
中的


(1)递归调用使用
rev_int
,应该是
reverse_int
,(2)您是否尝试将
let…in添加到
num=(num-temp)/10
in
之后的
让numDigits=string\u of_int num
?我添加了这些并编译了它。对不起,在我的代码中都是rev_int。我只是在StackOverflow中更改了它以更清楚地显示该方法的功能,但是我忘记了在本文中更改第二个。谢谢!现在编译,我还想知道为什么
num=
let…in
是必需的?您正在尝试声明一个局部变量来保存一些临时值。它不会全局保存该值,而是保存在后面的表达式中,因此您可以这样指定表达式(让identifier
num
代表
后面表达式中的以下商)。更有经验的人会给出更令人满意的答案。这是我的猜测;可能是错误的。ocaml中的变量是不可变的,所以不能只将其赋值给
num
。您可以使用嵌套的
let
暂时隐藏它,但要修改变量,您应该查看引用/可赋值项。