[英]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 ,它接受一个参数。 该参数是两个值param1
和param2
的元组。 它仅对不使用此name
function 的表达式(param1, expr1 param2)
进行本地绑定。
表达式expr1
中没有使用param1
和param2
名称(它们也可能是(_, _)
) ,并且当我们到达表达式(param1, expr1 param2)
时,它们不在 scope 中,所以如果这是有效代码,它们指的是到您向我们展示的代码之前的绑定。
实际上, name
根本没有任何作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.