我正在开发一个ocaml项目,我正在学习语法.我看到了一个程序,格式如下:
let foo1 = function
|(x, y) -> foo2 (x,y) z
and foo2 a s=
(*stuff in here*)
Run Code Online (Sandbox Code Playgroud)
我很关心and那里的情况.我试着在网上寻找可能意味着什么,但我似乎无法找到任何东西.它也可能只是一个错字...任何建议将不胜感激.谢谢!
and 用于定义相互递归的函数/数据类型.
如果没有and,你不能同时打电话foo2从foo1和foo1从foo2,你只能有其中之一.
rec在您的示例中,您还需要使其工作.没有rec,and就像平常一样let.
这是两个相互递归的函数定义:
let rec some_fun1 _ =
print_endline "fun1";
some_fun2 ()
and some_fun2 _ =
print_endline "fun2";
some_fun1 ()
Run Code Online (Sandbox Code Playgroud)
(就像我上面所说,没有rec这个不行)