我正在开发一个ocaml项目,我正在学习语法。我看到了一个程序,格式如下:
let foo1 = function
|(x, y) -> foo2 (x,y) z
and foo2 a s=
(*stuff in here*)
我关心and
在那里做了些什么。我试着在网上寻找可能意味着什么,但我似乎无法找到任何东西。它也可能只是一个错字...任何建议将不胜感激。谢谢!
答案 0 :(得分:6)
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 ()
(就像我上面所说,没有rec
这不起作用)