F#中的列表list
是不可变的一列数据。列表中的数据必须具有相同的数据类型。任何试图对列表进行修改的函数或者运算符,实际上都是构建了一个新的列表。
用如下方式来定义一个列表:
let empty = []
let singleValue = [5]
let threeValues = ["a"; "b"; "c"]
最普遍的向列表中添加元素的方式是通过cons
运算符::
:
let twoToFour = [2; 3; 4]
let oneToFour = 1 :: twoToFour
// => [1; 2; 3; 4]
一个列表有一个head
,剩下的内容都是tail
,即:head
为首个元素,tail
为除开head
的余下的列表。(这和 Haskell 是一致的)
List.head [1; 2; 3; 4; 5] // => 1
List.tail [1; 2; 3; 4; 5] // => [2; 3; 4; 5]let describe list =match list with| [] -> "Empty list"| head::tail -> sprintf "Non-empty list with head: %d" headdescribe [] // => "Empty list"
describe [1] // => "Non-empty with head: 1"
describe [5; 7; 9] // => "Non-empty with head: 5"
在模式匹配中使用抛弃符_
:
let describe list =match list with| [] -> "Empty list"| [x] -> "List with one item"| [_; y] -> "List with two items (first item ignored)"| _ -> "List with many items (all items ignored)"describe [] // => "Empty list"
describe [1] // => "List with one item"
describe [5; 7] // => "List with two items (first item ignored)"
describe [5; 7; 9] // => "List with many items (all items ignored)"