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