В Свифт, что такое "прогрессия"?

В разделе Control Flow в руководстве Swift Language,

Цикл for-in выполняет набор операторов для каждого элемента в диапазоне, последовательности, коллекции или прогрессии.

Я уверен, что знаю, что такое три:

  • диапазон: что-то определено с помощью операторов , ... или ..<
  • последовательность: что-то, что соответствует протоколу SequenceType (документация нигде не очевидна, но у разных людей обратное проектирование it)
  • коллекция: любой из типов коллекции Swift , т.е. Array и Dictionary

(примечание # 3, вероятно, избыточно, поскольку Array и Dictionary оба, похоже, соответствуют SequenceType.)

Но что такое "прогрессия"? Это что-то четвертое, или писатель просто был многословным?


ETA: Я вижу там протокол CollectionType, так что это объясняет # 3.

Ответ 1

Первое упоминание о "прогрессии", помимо документации для внутри, - в комментариях быстрой структуры, в которой определены методы шага.

func stride<T : Strideable>(from start: T, to end: T, by stride: T.Stride) -> StrideTo<T>

Возвращает последовательность значений (start, start + stride, start + stride + stride,... last), где last является последним значением в прогрессии, которое меньше end.

func stride<T : Strideable>(from start: T, through end: T, by stride: T.Stride) -> StrideThrough<T>

Возвращает последовательность значений (start, start + stride, start + stride + stride,... last), где last является последним значением в прогрессии, меньшим или равным end. Примечание. Нет гарантии, что end является элементом последовательности.

Итак, "прогрессия" относится к протоколу Strideable, аналогичному тому, как "сбор" относится к протоколу CollectionType и к классам и структурам, которые ему соответствуют.

Числовые типы (Int, Double, Float, UnsafePointer, бит и т.д.) имеют тенденцию соответствовать этому протоколу, поэтому они могут увеличиваться/уменьшаться для циклов for in. Полный граф наследования для протокола Strideable найден здесь.

Ответ 2

То, что вы, вероятно, ищете, это такой цикл (для шага)

for i in stride(from: 1, to: 10, by: 2) {
    println(i)
}

это новая замена синтаксиса для

for var i = 1; i < 10; i += 2 {
    println(i)
}

Ответ 3

Ответ на этот вопрос лежит в математике.

Существует два типа прогрессии в математике.

Арифметическая прогрессия и Геометрическая прогрессия

Из Wiki: Арифметическая прогрессия

В математике арифметическая прогрессия (AP) или арифметическая последовательность представляет собой последовательность чисел, так что разность между последовательные члены постоянны. Например, последовательность 5, 7, 9, 11, 13, 15... является арифметической прогрессией с общей разницей в 2.

Геометрическая прогрессия

В математике геометрическая прогрессия, также известная как геометрическая последовательность, представляет собой последовательность чисел, где каждый член после первого найденное путем умножения предыдущего на фиксированное ненулевое число называемое общим отношением. Например, последовательность 2, 6, 18, 54,... представляет собой геометрическую прогрессию с общим отношением 3. Аналогично 10, 5, 2,5, 1.25,... - геометрическая последовательность с общим отношением 1/2.