Compartilhar via


List.Fold < m',' estado > Função (F#)

Aplica uma função f a cada elemento da coleção, rosqueando um argumento de acumulador com a computação.A função de fold leva o segundo argumento, e aplica-lhe a função f e o primeiro elemento da lista.Em seguida, alimenta este resultado na função f juntamente com o segundo elemento, e assim por diante.Retorna o resultado final.Se a função de entrada é f e os elementos são i0...iN, então cálculos f (... (f s i0) i1 ...) iNde essa função.

Namespace/Module Path: Microsoft.FSharp.Collections.List

Assembly: FSharp.Core (em FSharp.Core.dll)

// Signature:
List.fold : ('State -> 'T -> 'State) -> 'State -> 'T list -> 'State

// Usage:
List.fold folder state list

Parâmetros

  • folder
    Tipo: 'State -> 'T -> 'State

    A função para atualizar o estado determinado os elementos de entrada.

  • state
    Tipo: 'State

    o estado inicial.

  • list
    Tipo: 'Tlista

    A lista de entrada.

Valor de retorno

O valor de estado final.

Comentários

Essa função é chamada Fold em assemblies compilados.Se você está acessando a função de um idioma diferente F#, ou com a reflexão, use este nome.

Exemplo

O exemplo a seguir demonstra o uso de List.fold

let data = [("Cats",4);
            ("Dogs",5);
            ("Mice",3);
            ("Elephants",2)]
let count = List.fold (fun acc (nm,x) -> acc+x) 0 data
printfn "Total number of animals: %d" count
  

O exemplo de código a seguir ilustra usos adicionais de List.fold.Observe que as funções de biblioteca que já existem encapsulam funcionalidades implementada em.Por exemplo, List.sum está disponível para adicionar anterior todos os elementos de uma lista.

let sumList list = List.fold (fun acc elem -> acc + elem) 0 list
printfn "Sum of the elements of list %A is %d." [ 1 .. 3 ] (sumList [ 1 .. 3 ])

// The following example computes the average of a list.
let averageList list = (List.fold (fun acc elem -> acc + float elem) 0.0 list / float list.Length)

// The following example computes the standard deviation of a list.
// The standard deviation is computed by taking the square root of the
// sum of the variances, which are the differences between each value
// and the average.
let stdDevList list =
    let avg = averageList list
    sqrt (List.fold (fun acc elem -> acc + (float elem - avg) ** 2.0 ) 0.0 list / float list.Length)

let testList listTest =
    printfn "List %A average: %f stddev: %f" listTest (averageList listTest) (stdDevList listTest)

testList [1; 1; 1]
testList [1; 2; 1]
testList [1; 2; 3]

// List.fold is the same as to List.iter when the accumulator is not used.
let printList list = List.fold (fun acc elem -> printfn "%A" elem) () list
printList [0.0; 1.0; 2.5; 5.1 ]

// The following example uses List.fold to reverse a list.
// The accumulator starts out as the empty list, and the function uses the cons operator
// to add each successive element to the head of the accumulator list, resulting in a
// reversed form of the list.
let reverseList list = List.fold (fun acc elem -> elem::acc) [] list
printfn "%A" (reverseList [1 .. 10])

Saída

  
  

Plataformas

O windows 8, Windows 7, Windows Server 2012, Windows Server 2008 R2

Informações de Versão

Versões da biblioteca principal de F#

Suportado em: 2,0, 4,0, portáteis

Consulte também

Referência

Módulo de Collections.List (F#)

Microsoft.FSharp.Collections Namespace (F#)