-1

我正在查看为 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 是函数记录。我没有发布整个文件(它很长),我的问题只是关于最外面的 let 语句。

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

let name = expr1 in expr2

那么当你有时是什么意思

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

有点像我这里的?

4

1 回答 1

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

可能会更清楚地写成:

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

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

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

有效name地什么都不做。

于 2021-12-30T20:38:24.777 回答