在下面的F#代码中firstElem如何获取值?我从下面的link获得了代码。
let rec quicksort list =
match list with
| [] -> // If the list is empty
[] // return an empty list
| firstElem::otherElements -> // If the list is not empty
let smallerElements = // extract the smaller ones
otherElements
|> List.filter (fun e -> e < firstElem)
|> quicksort // and sort them
let largerElements = // extract the large ones
otherElements
|> List.filter (fun e -> e >= firstElem)
|> quicksort // and sort them
// Combine the 3 parts into a new list and return it
List.concat [smallerElements; [firstElem]; largerElements]
答案 0 :(得分:1)
复制文本时,你的文字缩进以某种方式搞砸了。在链接的原始代码中,smallerElements
和largerElements
的let绑定都比匹配| firstElem::otherElements ->
进一步缩进。所以答案是firstElem
从与参数/变量list
的头部的匹配中获取其值。
编辑:术语头指的是列表的头部和尾部。 Head是第一个元素,Tail是所有其他元素。 E.g。
let ns = [1; 2; 3; 4]
let h = ns.Head
let t = ns.Tail
将返回
val ns : int list = [1; 2; 3; 4]
val h : int = 1
val t : int list = [2; 3; 4]
警告说没有为空列表定义Head和Tail。
行
match list with
| firstElem::otherElements ->
将list
的头部与firstElem
匹配,尾部与otherElements
匹配。