我正在阅读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#)"文档。
答案 0 :(得分:5)
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
放在一行中。