Introduction: List is a collection of related values. It is same as linked list data structure used in other languages. List allows us to link data together to form a chain. List plays an important role in functional programming. It can be an Empty list, List of fixed values or a list value concatenated to it. The below table shows the primitive constructs for building lists.

Expression Description
[ ] For empty List
[value1;...;valuen] List element
Exp::Exp concatenate element with a List. Two colons (::), pronounced as "cons" here.
[exp .. exp] A range of Integers
[for X in List -> exp] A generated List
exp @ exp Concatenates two Lists

Defining List:
Empty List: An empty List is represented by a square bracket( [ ] ).

Syntax: let listname=[]

Like, let emptylist= [ ]

List With Fix Elements: A simple list is defined with an element in square brackets. The list elements are separated with semicolons.
Syntax: let simplelist=[element1;element2;elementn]

Like,
let simplelist= [1;2;3;4;5 ]
let
simplelist=['A';'B';'C';'D';'E']
let
simplelist=["AAA";"BBB";"CCC"]
Or, We can also put line breaks among list element. Semicolon are optional here.
Like, let simplelist=[
element1
element2
elementn]
Example,
let simplelist= [1
2
3]

We write the following code

let simplelist1= [1;2;3;4;5 ]
let
simplelist2=[1
2
3
4
5]

printfn "%A" simplelist1
printfn "%A" simplelist2

The output will look like below:

simple list in f#

List with 'cons' operation: Elements can be concatenated to the front of list by built-in operator ( :: ). This is pronounced as 'cons'. Like, if there is a list as listone with element 2,3,4,5 and we want another list with values 1 and values of listone. Then we use this operator. Like below

let
listone= [2;3;4;5]
let listtwo=1 :: listone

We write the following code to understand it.

let
listone= [2;3;4;5]//first list
let
listtwo=1 :: listone//using 'cons'

printfn "%A" listone
printfn "%A" listtwo

Then run the program by pressing Ctrl+F5, The output will look like below

cons list

Range: We can also define a list with range indication. List elements are defined with assigning lower and upper bounds. We can also add a third element as a step in the square bracket to increment by fixed value. Although it is optional. its syntax is given below

let listname=[lower_bound..step..upper_bound]

Now we write the following code

let list1= [1..10 ]
let
list2=[1..2..20]

printfn "%A" list1
printfn "%A" list2

The output will look like below:

range

List With Sequence Expression:
We can also construct a list using sequence expression. We write the following code for creating a list of numbers 1 to 10 using sequence expression.

let list1= [for i in 1..10 -> i ]
printfn "%A" list1

The output will look like below:

sequence expression

Concatenation of Two Lists: Two lists can be concatenated with the @ operator. For this, List should be of a compatible type. We write the following code for concatenation of two list list1 and list2 as list3.

let list1= [1;2;3;4;5]
let
list2=[6;7;8;9;10];

let
list3=list1 @ list2


printfn "%A" list1
printfn "%A" list2
printfn "%A" list3

Output will look like as below figure

concatenate