在这个F#代码中,firstElem如何获得值?

时间:2017-05-13 21:12:03

标签: f#

在下面的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]

1 个答案:

答案 0 :(得分:1)

复制文本时,你的文字缩进以某种方式搞砸了。在链接的原始代码中,smallerElementslargerElements的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匹配。