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" 的文档也没有对此进行解释。您必须查看该 "Verbose Syntax (F#)" 文档。
let
表达式的详细语法是 let <ident> = <exp> in <exp>
。因此,要定义和添加两个变量,您可以编写 let x = 23 in let y = 42 in x + y
。 F# 的简洁语法允许您在行尾省略 in
,因此该示例将改写为:
let x = 23
let y = 42
x + y
您的代码通过保留第一个 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" 的文档也没有对此进行解释。您必须查看该 "Verbose Syntax (F#)" 文档。
let
表达式的详细语法是 let <ident> = <exp> in <exp>
。因此,要定义和添加两个变量,您可以编写 let x = 23 in let y = 42 in x + y
。 F# 的简洁语法允许您在行尾省略 in
,因此该示例将改写为:
let x = 23
let y = 42
x + y
您的代码通过保留第一个 in
以便能够在一行中包含两个 let
来混合详细语法和简单语法。