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 -> 'StateA função para atualizar o estado determinado os elementos de entrada.
state
Tipo: 'Stateo estado inicial.
list
Tipo: 'TlistaA 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