簡體   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