Функция 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, портативное