建立列表

建立列表的方法是將元素放在兩個方括號中,用分號分隔。元素必須具有相同的型別。

例:

> let integers = [1; 2; 45; -1];;
val integers : int list = [1; 2; 45; -1]

> let floats = [10.7; 2.0; 45.3; -1.05];;
val floats : float list = [10.7; 2.0; 45.3; -1.05]

當列表沒有元素時,它是空的。空列表可以宣告如下:

> let emptyList = [];;
val emptyList : 'a list

其他例子

要建立一個 byte 列表,只需要轉換整數:

> let bytes = [byte(55); byte(10); byte(100)];;
val bytes : byte list = [55uy; 10uy; 100uy]

還可以定義函式列表,先前定義的型別的元素,類的物件等。

> type number = | Real of float | Integer of int;;

type number =
  | Real of float
  | Integer of int

> let numbers = [Integer(45); Real(0.0); Integer(127)];;
val numbers : number list = [Integer 45; Real 0.0; Integer 127]

範圍

對於某些型別的元素(int,float,char,…),可以使用以下模板通過 start 元素和 end 元素定義列表:

[start..end]

例子:

> let c=['a' .. 'f'];;
val c : char list = ['a'; 'b'; 'c'; 'd'; 'e'; 'f']

let f=[45 .. 60];;
val f : int list =
  [45; 46; 47; 48; 49; 50; 51; 52; 53; 54; 55; 56; 57; 58; 59; 60]

你還可以使用以下模型為特定型別指定步驟:

[start..step..end]

例子:

> let i=[4 .. 2 .. 11];;
val i : int list = [4; 6; 8; 10]

> let r=[0.2 .. 0.05 .. 0.28];;
val r : float list = [0.2; 0.25]

發電機

建立列表的另一種方法是使用生成器自動生成它。

我們可以使用以下模型之一:

[for <identifier> in range -> expr]

要麼

[for <identifier> in range do ... yield expr]

例子

> let oddNumbers = [for i in 0..10 -> 2 * i + 1];; // odd numbers from 1 to 21
val oddNumbers : int list = [1; 3; 5; 7; 9; 11; 13; 15; 17; 19; 21]

> let multiples3Sqrt = [for i in 1..27 do if i % 3 = 0 then yield sqrt(float(i))];; //sqrt of multiples of 3 from 3 to 27
val multiples3Sqrt : float list =
  [1.732050808; 2.449489743; 3.0; 3.464101615; 3.872983346; 4.242640687;    4.582575695; 4.898979486; 5.196152423]

運算子

一些運算子可用於構造列表:

Cons 運算子::

此運算子::用於將 head 元素新增到列表中:

> let l=12::[] ;;
val l : int list = [12]

> let l1=7::[14; 78; 0] ;;
val l1 : int list = [7; 14; 78; 0]

> let l2 = 2::3::5::7::11::[13;17] ;;
val l2 : int list = [2; 3; 5; 7; 11; 13; 17]

級聯

列表的串聯由運算子 @執行。

> let l1 = [12.5;89.2];;
val l1 : float list = [12.5; 89.2]

> let l2 = [1.8;7.2] @ l1;;
val l2 : float list = [1.8; 7.2; 12.5; 89.2]