Qualquer programação séria em qualquer idioma sempre incluirá listas. Assim, você ficará satisfeito em saber que o F # suporta muito bem listas usando seu módulo List. Uma lista em F # é uma série ordenada e imutável de elementos do mesmo tipo.
Crie uma lista
Existem várias maneiras no F # de criar uma lista.
- Crie uma lista vazia
- Crie uma lista simples com itens de 1 a 10
- Crie uma lista com números ímpares no intervalo de 1 a 10
- Use o loop for para criar uma lista.
let prettyPrint desc list = printfn desc printfn "%A" list //empty list let listEmpty = [] //simple list let list1 = [1 .. 10 ] //simple list, with step value let list2 = [1 ..2..10 ] //using for loops to create lists let list3 = [for i in 1 .. 10 -> i*2 ] prettyPrint "let listEmpty = []" listEmpty prettyPrint "let list1 = [ 1 .. 10 ]" list1 prettyPrint "let list2 = [ 1 .. 2..10 ]" list2 prettyPrint "[ for i in 1 .. 10 -> i*2 ]" list3

O último exemplo mostrado acima mostra como usar o loop for para criar uma lista, o que é muito legal, mas há algo ainda mais interessante e poderoso na caixa de ferramentas do F #, a saber Compreensões da Lista.
Compreensões de lista é um método poderoso que permite criar listas usando praticamente o F # padrão, que inclui funções / loops / condições, etc.
Vamos continuar a ver um exemplo de como poderíamos criar listas.
let is2 x = match x with | 2 -> "YES" | _ -> "NO" //yield directly let list1 = [ yield 1; yield 2; yield 3; ] //yield numbers between 1 and 20 where we use the //Math.Pow function to return a new number let list2 = [for i in 1.0 .. 20.0 do yield Math.Pow(i,2.0) ] //yield only numbers between 1 and 20 that //can be divided by 5 let list3 = [ for i in 1 .. 20 do if i

Alguns operadores de lista úteis
Contras operador
Podemos usar o operador contras “::” para adicionar valores a uma lista existente, portanto, suponha que tenhamos esta lista:
let list1 = [1;2;3;4] let list2 = 42 :: list1

Operador de concatenação
Outro operador muito útil é o operador "@", que permite combinar listas do mesmo tipo. Então, por exemplo, se tivéssemos isso:
let list1 = [1;2;3;4] let list2 = [5;6;7;8] let list3 = list1 @ list2

Módulo de lista
Acho que não exagerei quando digo que o módulo List é um módulo chave em F #. De fato, a documentação do MSDN é muito boa em comparação com outras no F #. Portanto, acho que não posso acrescentar muita utilidade aos exemplos encontrados no MSDN, mas darei alguns aqui para sua conveniência,
mas você deve estudar o MSDN para obter mais informações .
As propriedades
Head
'T
Primeiro elemento
Empty
'T list
Retorna uma lista vazia do tipo especificado
Isemptybooltrue - se não houver elementos na lista
Item'T
Um item que está em um índice específico
ComprimentointNúmero de itens
CaudaLista T
Lista sem primeiro item:
let list1 = [ 1; 2; 3 ] // Properties printfn "list1.IsEmpty is %b" (list1.IsEmpty) printfn "list1.Length is %d" (list1.Length) printfn "list1.Head is %d" (list1.Head) printfn "list1.Tail.Head is %d" (list1.Tail.Head) printfn "list1.Tail.Tail.Head is %d" (list1.Tail.Tail.Head) printfn "list1.Item(1) is %d" (list1.Item(1))

Filtro
Retorna uma nova coleção que contém apenas os elementos da coleção para os quais o predicado especificado retorna verdadeiro. Aqui está um exemplo trivial que seleciona apenas números pares de uma lista para criar uma nova lista
let evenOnlyList = List.filter (fun x -> x

Pesquisar (localizar)
Retorna o primeiro elemento para o qual essa função retorna true. Neste exemplo, como a lista de 1 a 100 contém 5, 5 é o 1º número, dividido por 5, então esse é o valor de retorno:

Para todos (forall)
Verifica se todos os elementos da coleção atendem a um determinado predicado. Neste exemplo, a lista inteira deve conter 0 para obter o verdadeiro valor de retorno.
let isAllZeroes list = List.forall (fun elem -> elem = 0.0) list printfn "%b" (isAllZeroes [0.0; 0.0]) printfn "%b" (isAllZeroes [0.0; 1.0])

Aplicar a todos (Iteri)
Aplica essa função a cada item da coleção. O número inteiro passado para a função indica o índice do elemento.
let data = ["Cats";"Dogs";"Mice";"Elephants"] data |> List.iteri (fun ix -> printfn "item %d: %s" ix)

Classificar por (SortWith)
Classifica a lista especificada usando esta função de comparação.
let list1 = [ ""; "&"; "&&"; "&&&"; ""; "|"; "||"; "|||" ] printfn "Before sorting: " list1 |> printfn "%A" //custom sorting function let sortFunction (string1:string) (string2:string) = if (string1.Length > string2.Length) then 1 else if (string1.Length printfn "After sorting:\n%A"

Existem muitas funções úteis no módulo de lista, essa é apenas uma pequena parte do que você pode encontrar.
Uma pequena olhada na recursão sobre listas
Nenhuma discussão sobre listas seria completa sem falar em recursão.Recursão é o assunto de toda a postagem, mas, por enquanto, vamos dar uma olhada no que é necessário para escrever uma função recursiva que funciona em uma lista em F #.
let printIt desc x = printfn "%A %A" desc x let rec printList list = match list with | h :: t -> printIt "head=" h printIt "tail=" t printList t | [] -> () printList [1;2;3;4;5]
Observe o uso da palavra-chave
rec , que informa ao compilador F # que essa função será recursiva. Sem essa palavra-chave, uma chamada de função recursiva - você receberá uma mensagem de erro de compilação, embora com um texto de erro não muito claro.

Então, vamos ver os resultados do exemplo mostrados um pouco mais alto com a seguinte lista [1; 2; 3; 4; 5]

Você pode ver que tudo funciona muito bem e para de funcionar quando o valor corresponde a uma lista vazia, conforme o esperado.