"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
是一个接受一个参数的函数更加明显。该参数是两个值 param1
和 param2
的元组。它仅针对不使用此 name
函数的表达式 (param1, expr1 param2)
进行本地绑定。
param1
和 param2
名称未用于表达式 expr1
(它们也可能是 (_, _)
) 并且当我们到达表达式 (param1, expr1 param2)
时超出范围,因此如果这是有效代码,它们会引用 在 您向我们展示的代码之前的绑定。
实际上 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
是一个接受一个参数的函数更加明显。该参数是两个值 param1
和 param2
的元组。它仅针对不使用此 name
函数的表达式 (param1, expr1 param2)
进行本地绑定。
param1
和 param2
名称未用于表达式 expr1
(它们也可能是 (_, _)
) 并且当我们到达表达式 (param1, expr1 param2)
时超出范围,因此如果这是有效代码,它们会引用 在 您向我们展示的代码之前的绑定。
实际上 name
什么都不做。