F#
Последовательность
Поиск…
Генерировать последовательности
Существует несколько способов создания последовательности.
Вы можете использовать функции модуля Seq:
// Create an empty generic sequence
let emptySeq = Seq.empty
// Create an empty int sequence
let emptyIntSeq = Seq.empty<int>
// Create a sequence with one element
let singletonSeq = Seq.singleton 10
// Create a sequence of n elements with the specified init function
let initSeq = Seq.init 10 (fun c -> c * 2)
// Combine two sequence to create a new one
let combinedSeq = emptySeq |> Seq.append singletonSeq
// Create an infinite sequence using unfold with generator based on state
let naturals = Seq.unfold (fun state -> Some(state, state + 1)) 0
Вы также можете использовать выражение последовательности:
// Create a sequence with element from 0 to 10
let intSeq = seq { 0..10 }
// Create a sequence with an increment of 5 from 0 to 50
let intIncrementSeq = seq{ 0..5..50 }
// Create a sequence of strings, yield allow to define each element of the sequence
let stringSeq = seq {
yield "Hello"
yield "World"
}
// Create a sequence from multiple sequence, yield! allow to flatten sequences
let flattenSeq = seq {
yield! seq { 0..10 }
yield! seq { 11..20 }
}
Введение в последовательности
Последовательность представляет собой ряд элементов, которые можно перечислить. Это псевдоним System.Collections.Generic.Inumerable и ленивый. Он хранит ряд элементов одного типа (может быть любое значение или объект, даже другая последовательность). Функции от Seq.module могут использоваться для работы с ним.
Вот простой пример перечисления последовательности:
let mySeq = { 0..20 } // Create a sequence of int from 0 to 20
mySeq
|> Seq.iter (printf "%i ") // Enumerate each element of the sequence and print it
Выход:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Seq.map
let seq = seq {0..10}
s |> Seq.map (fun x -> x * 2)
> val it : seq<int> = seq [2; 4; 6; 8; ...]
Примените функцию к каждому элементу последовательности, используя Seq.map
Seq.filter
Предположим, что у нас есть последовательность целых чисел, и мы хотим создать последовательность, содержащую только четные целые числа. Мы можем получить последнее, используя функцию filter
модуля Seq. Функция filter
имеет сигнатуру типа ('a -> bool) -> seq<'a> -> seq<'a>
; это означает, что он принимает функцию, которая возвращает true или false (иногда называемый предикатом) для заданного ввода типа 'a
и последовательности, которая содержит значения типа 'a
чтобы получить последовательность, которая содержит значения типа 'a
.
// Function that tests if an integer is even
let isEven x = (x % 2) = 0
// Generates an infinite sequence that contains the natural numbers
let naturals = Seq.unfold (fun state -> Some(state, state + 1)) 0
// Can be used to filter the naturals sequence to get only the even numbers
let evens = Seq.filter isEven naturals
Бесконечные повторяющиеся последовательности
let data = [1; 2; 3; 4; 5;]
let repeating = seq {while true do yield! data}
Повторяющиеся последовательности могут быть созданы с использованием выражения вычисления seq {}