Printing OCaml-从函数返回前打印

Printing OCaml-从函数返回前打印,printing,functional-programming,range,ocaml,Printing,Functional Programming,Range,Ocaml,我在OCaml中有一个函数,它返回两个数字的范围(取自): 让rec在a到b范围内= 如果a>b,则[] 否则a::范围(a+1)b;; 这个函数是有意义的,但我想实际打印出范围 我的第一反应是尝试这样的事情: 让rec在a到b范围内= 如果a>b,则[] 否则,打印一份;a::范围(a+1)b;; 但这引发了错误:error:此表达式的类型为unit,但表达式的类型应为'a list 这很有意义,因为我现在基本上返回一个单位值,因为OCaml将print语句解释为它应该返回的内容 那么,这

我在OCaml中有一个函数,它返回两个数字的范围(取自):

让rec在a到b范围内=
如果a>b,则[]
否则a::范围(a+1)b;;
这个函数是有意义的,但我想实际打印出范围

我的第一反应是尝试这样的事情:

让rec在a到b范围内=
如果a>b,则[]
否则,打印一份;a::范围(a+1)b;;
但这引发了错误:
error:此表达式的类型为unit,但表达式的类型应为'a list
这很有意义,因为我现在基本上返回一个单位值,因为OCaml将print语句解释为它应该返回的内容


那么,这里是否有一些最佳实践允许我打印值,然后返回我想要的值?函数式编程非常陌生,所以请原谅这个简单的问题。

正如@glennl在评论中所说,这只是一个括号问题。 请注意,如果您觉得括号更清晰,也可以使用
开始
结束
结构,而不是括号(但这只是风格问题):

让rec在a到b范围内=
如果a>b,则[]
否则开始
印刷品;
a::范围(a+1)b
完;;;

使用括号,卢克<代码>(打印内容a;a::范围(a+1)b)哦,太棒了,谢谢,这很有效!在这种情况下,OCaml是否只返回paren中指定的最后一个值?所以它首先打印出a,然后返回范围(a+1)b?
可以。它是一个序列运算符,不是语句终止符<代码>
将计算但忽略前面的表达式,并返回后面表达式的值。这里的问题是,如果没有括号,“before”表达式就是整个if表达式。添加括号使其成为
else
分支的子表达式。