Ocaml递归在另一个函数中不打印int

Ocaml递归在另一个函数中不打印int,ocaml,Ocaml,当我编译和执行这段代码时。它什么也不印 let main list = let rec xyz list = match list with |[]->[] |m::body -> begin print_int m; xyz body end in xyz

当我编译和执行这段代码时。它什么也不印

 let main list = 
        let rec xyz list = 
            match list with
            |[]->[]
            |m::body -> 
            begin
            print_int m;
            xyz body 
            end
        in xyz
    
    let h = main [1;2;3]

如果在main之外使用了xyz,并且正在正常工作,并且打印1 2和3

在启用所有警告的情况下编译代码会产生以下警告:

1 | let main list =
             ^^^^
Warning 27 [unused-var-strict]: unused variable list.
实际上,参数
list
main
中未使用,因为在

let main list =
  let rec xyz list =
    ...
  in
  xyz

您正在返回函数
xyz
,但未应用它。

在启用所有警告的情况下编译代码会产生以下警告:

1 | let main list =
             ^^^^
Warning 27 [unused-var-strict]: unused variable list.
实际上,参数
list
main
中未使用,因为在

let main list =
  let rec xyz list =
    ...
  in
  xyz


您正在返回函数
xyz
,但没有应用它。

为什么会这样?您没有运行内部函数。我敢打赌,您也会收到关于未使用值的警告。您应该注意该警告,或者使用返回值,或者使用类型注释显式忽略它。这会给您一个更有用的错误。@glennsl,您使用什么命令来显示所有警告?如果您直接使用ocamlc或ocamlopt,您可以在命令行上使用
-w+a
。在文件本身中,在文件顶部添加
[@@@warning“+A”]
将是等效的。Dune在默认情况下启用了一组更好的警告。默认情况下启用了
unused var
警告,因此您不需要做任何事情。不过,打开所有警告并不是一个坏主意。甚至是
-warn error+A
将它们变成错误。@octachron啊,我最初指的是
h
变量,它似乎也没有被使用,因为它的类型不是人们期望从函数中得到的类型。为什么?您没有运行内部函数。我敢打赌,您也会收到关于未使用值的警告。您应该注意该警告,或者使用返回值,或者使用类型注释显式忽略它。这会给您一个更有用的错误。@glennsl,您使用什么命令来显示所有警告?如果您直接使用ocamlc或ocamlopt,您可以在命令行上使用
-w+a
。在文件本身中,在文件顶部添加
[@@@warning“+A”]
将是等效的。Dune在默认情况下启用了一组更好的警告。默认情况下启用了
unused var
警告,因此您不需要做任何事情。不过,打开所有警告并不是一个坏主意。甚至是
-warn error+A
将它们变成错误。@octachron啊,我最初指的是
h
变量,它似乎也没有被使用,因为它的类型不是人们期望从函数中得到的类型。我需要在代码中更正什么?您需要使用
main
list
参数。我需要使用xyz list right?确实,这是解决方案之一。我需要在代码中更正什么?您需要使用
main
list
参数。我需要正确使用xyz list?事实上,这是解决方案之一。