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?事实上,这是解决方案之一。