Поделиться через


Функция Seq.unfold<'State,'T> (F#)

Возвращает последовательность, которая содержит элементы созданные данным вычислением.

Пространство имен/путь к модулю: Microsoft.FSharp.Collections.Seq

Сборка: FSharp.Core (в FSharp.Core.dll)

// Signature:
Seq.unfold : ('State -> 'T * 'State option) -> 'State -> seq<'T>

// Usage:
Seq.unfold generator state

Параметры

  • generator
    Тип: 'State -> 'T * 'State option

    Функция, которая принимает текущее состояние и возвращает кортеж параметров из следующего элемента последовательности и следующего значения состояния.

  • state
    Тип: 'State

    Начальное значение состояния.

Возвращаемое значение

Результирующая последовательность.

Заметки

Заданный аргумент начального состояния state передается генератору элементов.Каждый элемент IEnumerator в потоке создается по требования с помощью генератора элемента, пока он не возвращает значение None.Каждый вызов генератора элементов возвращает новое состояние state.

Поток вычисляется заново при каждом запросе IEnumerator и итерации объекта для последовательности.Возвращаемая последовательность может безопасно передаваться между потоками.Однако не следует выполнять параллельный доступ к отдельным значениям IEnumerator, созданным из возвращенной последовательности.

В скомпилированных сборках имя этой функции — Unfold.При обращении к функции из языка, отличного от F#, или посредством отражения следует использовать это имя.

Пример

В следующем примере кода демонстрируется использование Seq.unfold для создания двух последовательностей.Первый просто создает последовательность целых чисел.Второй создает последовательность чисел Фибоначчи, которые составляются путем добавления двух предыдущих чисел в последовательности.Первые два числа в последовательность Фибоначчи — (1, 1), формирующие первоначальный параметр state.Состояние на каждом этапе описывается двумя числами, сума которых дает следующее число Фибоначчи.

let seq1 = Seq.unfold (fun state -> if (state > 20) then None else Some(state, state + 1)) 0
printfn "The sequence seq1 contains numbers from 0 to 20."
for x in seq1 do printf "%d " x
let fib = Seq.unfold (fun state ->
    if (snd state > 1000) then None
    else Some(fst state + snd state, (snd state, fst state + snd state))) (1,1)
printfn "\nThe sequence fib contains Fibonacci numbers."
for x in fib do printf "%d " x
  
  
  

Платформы

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

Сведения о версии

Основной версии библиотеки F#

Поддерживается в: 2.0, 4.0, портативное

См. также

Ссылки

Модуль Collections.Seq (F#)

Пространство имен Microsoft.FSharp.Collections (F#)