Share via


Array.scanBack<'T,'State> Function (F#)

Like Array.foldBack, but returns both the intermediate and final results.

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

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

// Signature:
Array.scanBack : ('T -> 'State -> 'State) -> 'T [] -> 'State -> 'State []

// Usage:
Array.scanBack folder array state

Parameters

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

    The function to update the state given the input elements.

  • array
    Type: 'T []

    The input array.

  • state
    Type: 'State

    The initial state.

Return Value

The array of state values.

Remarks

This function is named ScanBack in compiled assemblies. If you are accessing the function from a language other than F#, or through reflection, use this name.

Example

The following code contrasts the behavior of Array.scan and Array.scanBack.

// An array of functions that transform 
// integers. (int -> int)
let ops1 =
 [| fun x -> x + 1
    fun x -> x + 2
    fun x -> x - 5 |]

let ops2 =
 [| fun x -> x + 1
    fun x -> x * 5
    fun x -> x * x |]

// Compare scan and scanBack, which apply the
// operations in the opposite order.
let compareOpOrder ops x0 =
    let xs1 = Array.scan (fun x op -> op x) x0 ops
    let xs2 = Array.scanBack (fun op x -> op x) ops x0

    // Print the intermediate results
    let xs = Array.zip xs1 (Array.rev xs2)
    for (x1, x2) in xs do
        printfn "%10d %10d" x1 x2
    printfn ""

compareOpOrder ops1 10
compareOpOrder ops2 10

Output

        10         10
        11          5
        13          7
         8          8

        10         10
        11        100
        55        500
      3025        501

Platforms

Windows 7, Windows Vista SP2, Windows XP SP3, Windows XP x64 SP2, Windows Server 2008 R2, Windows Server 2008 SP2, Windows Server 2003 SP2

Version Information

F# Runtime

Supported in: 2.0, 4.0

Silverlight

Supported in: 3

See Also

Reference

Collections.Array Module (F#)

Microsoft.FSharp.Collections Namespace (F#)