Функция 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 7, Windows Vista с пакетом обновления 2 (SP2), Windows XP с пакетом обновления 3 (SP3), Windows XP x64 с пакетом обновления 2 (SP2), Windows Server 2008 R2, Windows Server 2008 с пакетом обновления 2 (SP2), Windows Server 2003 с пакетом обновления 2 (SP2)
Сведения о версии
Среда выполнения F#
Поддерживается в версиях 2.0, 4.0
Silverlight
Поддерживается в версии 3