OCaml能检查尾递归吗?

4

有没有办法让OCaml告诉我一个函数是否使用尾递归实现?我不是指阅读代码。我的意思是让OCaml告诉我,就像这样:

let x = tail_recursion f;;
1个回答

4

您可以使用“-annot”编译源代码。这将生成一个注释文件,一些编辑器可以使用。

在caml-mode (emacs)中的命令是:

 M-x caml-types-show-call

我运行了命令 "ocaml -annot a.ml",但是我没有看到注释文件。我有 a.cmi、a.cmo 和 a.o 文件。 - user2926204
此外,除了emacs/xemacs之外,是否有我可以使用的命令行工具? - user2926204
2
ocamlc -annot foo.ml 应该生成 foo.annot,除非存在类型错误。(如果 foo.ml 依赖其他模块,则需要像往常一样传递它们。) - gsg
没事了,是我的错。我打成了"ocamlc a.ml -annot"而不是"ocamlc -annot a.ml"。谢谢大家。 - user2926204
2
您应该获取一个类似于"test.ml" 1 0 19 "test.ml" 1 0 22\ncall(\n tail\n)的条目。请注意,这指的是源文件中调用点(而不是函数定义)的文本范围。我不确定是否有任何独立于编辑器的工具来解析此信息,因为我只使用emacs。 - gsg
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接