If statement OCaml中的多行if语句有问题
我在谷歌上找不到一个明确的答案,但如果OCaml(?)中不鼓励使用多行语句,则似乎是多行的。我看到的多行语句中似乎有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 /
开始-结束
关键字
我当前在第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
是必需的?您正在尝试声明一个局部变量来保存一些临时值。它不会全局保存该值,而是保存在后面的表达式中,因此您可以这样指定表达式(让identifiernum
代表中后面表达式中的以下商)。更有经验的人会给出更令人满意的答案。这是我的猜测;可能是错误的。ocaml中的变量是不可变的,所以不能只将其赋值给num
。您可以使用嵌套的let
暂时隐藏它,但要修改变量,您应该查看引用/可赋值项。