"let name(param1, param2) = .." 在 ocaml 中是什么意思(而不是仅仅让 name = ...)?

What does "let name(param1, param2) = .." mean in ocaml (as opposed to just let name = ...)?

我正在查看为 C 的极度精简版本编写的编译器。我是 ocaml 的新手,对此结构特别困惑

let check (globals, functions) =
(* A bunch of stuff abstracted out *)
  let check_function ...
   .... (*A b bunch of stuff abstracted out*)
in (globals, List.map check_function functions)

其中globals是一个列表(var_type,var_name),functions是一个函数记录。我没有 post 整个文件(它很长),我的问题只是关于最外层的 let 语句。

我一直只看到简单的 let 语句,您可能会有类似的东西

let name = expr1 in expr2

那么当你有

时这意味着什么
let name(param1, param2) = expr1 in (param1, expr1 param2) 

有点像我这里的?

let name(param1, param2) = expr1 in (param1, expr1 param2)

也许写得更清楚:

let name (param1, param2) = 
  expr1 
in 
  (param1, expr1 param2)

额外的 space 使 name 是一个接受一个参数的函数更加明显。该参数是两个值 param1param2 的元组。它仅针对不使用此 name 函数的表达式 (param1, expr1 param2) 进行本地绑定。

param1param2 名称未用于表达式 expr1 (它们也可能是 (_, _) 并且当我们到达表达式 (param1, expr1 param2) 时超出范围,因此如果这是有效代码,它们会引用 您向我们展示的代码之前的绑定。

实际上 name 什么都不做。