簡體   English   中英

f#:示例中使用“.. in let ..”的奇怪語法

[英]f#: Strange syntax in example using ".. in let .."

我正在閱讀有關RosettaCode的示例,但並不完全知道以下行在做什么。

let min,subheap = findMin heap' in let rtn = root topnode

似乎findMin heap'是自包含的執行單元。 我不知道它與“in”運算符的關系,也不了解“in”運算符中 let 語句的使用。

這是整個方法

let rec private findMin heap =
  match heap with | [] -> raise Empty_Heap //guarded so should never happen
                  | [node] -> root node,[]
                  | topnode::heap' ->
                    let min,subheap = findMin heap' in let rtn = root topnode
                    match subheap with
                      | [] -> if rtn.k > min.k then min,[] else rtn,[]
                      | minnode::heap'' ->
                        let rmn = root minnode
                        if rtn.k <= rmn.k then rtn,heap
                        else rmn,minnode::topnode::heap''

[編輯] 即使在 sepp2k 解釋了它之后,“let”的文檔也沒有解釋這一點。 您必須查看“詳細語法(F#)”文檔。

let表達式的詳細語法是let <ident> = <exp> in <exp> 因此,要定義和添加兩個變量,您可以let x = 23 in let y = 42 in x + y編寫let x = 23 in let y = 42 in x + y F# 的輕量級語法允許您在行尾省略in ,因此此示例將改寫為:

let x = 23
let y = 42
x + y

您的代碼通過保留第一個in以便能夠在一行中包含兩個let ,從而混合了冗長和簡潔的語法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM