繁体   English   中英

“let name(param1, param2) =..”在 ocaml 中是什么意思(而不是 let 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 是 function 记录。 我没有发布整个文件(它很长),我的问题只是关于最外面的 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)

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

表达式expr1中没有使用param1param2名称(它们也可能是(_, _) ,并且当我们到达表达式(param1, expr1 param2)时,它们不在 scope 中,所以如果这是有效代码,它们指的是到您向我们展示的代码之前的绑定。

实际上, name根本没有任何作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM