OCaml - 从函数返回前打印
OCaml - print before returning from a function
我在 OCaml 中有一个函数 return 是两个数字的范围(取自 https://ocaml.org/learn/tutorials/basics.html):
let rec range a b =
if a > b then []
else a :: range (a + 1) b;;
这个函数很有意义,但我想实际打印出范围。
我的第一直觉是尝试这样的事情:
let rec range a b =
if a > b then []
else print_int a; a :: range (a + 1) b;;
但这引发了错误:Error: This expression has type unit but an expression was expected of type 'a list
这是有道理的,因为我现在本质上是 return 一个单位值,因为 OCaml 将打印语句解释为它应该 return.
那么,这里是否有一些最佳实践可以让我 打印 值,然后 return 我的内容愿意吗?函数式编程的新手所以请原谅这个简单的问题。
正如@glennl 在评论中所说,这只是一个括号问题。
请注意,如果您觉得更清楚,也可以使用 begin
end
结构而不是括号(但这只是样式问题):
let rec range a b =
if a > b then []
else begin
print_int a;
a :: range (a + 1) b
end;;
我在 OCaml 中有一个函数 return 是两个数字的范围(取自 https://ocaml.org/learn/tutorials/basics.html):
let rec range a b =
if a > b then []
else a :: range (a + 1) b;;
这个函数很有意义,但我想实际打印出范围。
我的第一直觉是尝试这样的事情:
let rec range a b =
if a > b then []
else print_int a; a :: range (a + 1) b;;
但这引发了错误:Error: This expression has type unit but an expression was expected of type 'a list
这是有道理的,因为我现在本质上是 return 一个单位值,因为 OCaml 将打印语句解释为它应该 return.
那么,这里是否有一些最佳实践可以让我 打印 值,然后 return 我的内容愿意吗?函数式编程的新手所以请原谅这个简单的问题。
正如@glennl 在评论中所说,这只是一个括号问题。
请注意,如果您觉得更清楚,也可以使用 begin
end
结构而不是括号(但这只是样式问题):
let rec range a b =
if a > b then []
else begin
print_int a;
a :: range (a + 1) b
end;;