Programming Taskbook 0


Download 1.62 Mb.
Pdf ko'rish
bet28/71
Sana21.06.2023
Hajmi1.62 Mb.
#1644761
TuriУчебное пособие
1   ...   24   25   26   27   28   29   30   31   ...   71
Bog'liq
Abramyan-Pascal2016-1

4848179262E+20,...] 
Поскольку бесконечные последовательности можно использовать в 
программах, для их генерации предусмотрены особые средства, не требу-
ющие применения «фиктивных» предикатов, всегда возвращающих значе-
ние True. Большинство этих средств представляют собой особые методы, 
которые применяются к элементу, используемому при генерации беско-


48 
нечной последовательности. Имеются три таких метода: Repeat, Step и
Iterate.
Метод Repeat является самым простым. В результате его применения к 
некоторому элементу e (произвольного типа) мы получаем бесконечную 
последовательность, состоящую из одинаковых элементов e, например: 
var a := 2.Repeat; // [2,2,2,2,2,2,2,…] 
Заметим, что имя метода Repeat совпадает с одним из ключевых слов
Паскаля, однако это не препятствует его использованию в программе. 
Метод Step может применяться только к числовым типам и позволяет 
создавать бесконечные арифметические прогрессии. При этом число, для 
которого вызывается метод, считается первым элементом прогрессии, а ее 
разность указывается в качестве единственного параметра метода, напри-
мер: 
var b := 2.Step(3); // [2,5,8,11,14,17,20,…] 
Параметр в методе Step можно не указывать, в этом случае разность 
прогрессии считается равной 1. 
Метод Iterate позволяет создавать бесконечные последовательности, 
основанные на применении рекуррентных формул. Он имеет два перегру-
женных варианта, аналогичных вариантам рассмотренной ранее функции 
SeqWhile (тоже использующей рекуррентную формулу). Отличия метода 
Iterate от функции SeqWhile заключаются в том, что в нем отсутствует за-
вершающий параметр-предикат, а также в том, что этот метод должен вы-
зываться для начального элемента последовательности (если вычисление 
по рекуррентной формуле требует использования двух предыдущих эле-
ментов, то второй элемент указывается в качестве первого параметра ме-
тода Iterate). Рекуррентная формула, как обычно, оформляется в виде лямб-
да-выражения и указывается в качестве последнего параметра метода
Iterate. Например, последовательность Фибоначчи, созданную ранее с по-
мощью второго варианта функции SeqWhile, можно создать более простым 
способом, используя соответствующий вариант метода Iterate: 
var fib := 1.0.Iterate(1.0, (a, b) -> a + b); 
Наконец, еще одним вариантом создания бесконечной последователь-
ности является «зацикливание» уже имеющейся, конечной последователь-
ности. Для того чтобы получить на основе последовательности s бесконеч-
ную циклическую последовательность, достаточно вызвать для исходной 
последовательности метод Cycle без параметров: s.Cycle. Можно также ис-
пользовать вариант вызова в виде функции с параметром: Cycle(s). Пример: 
var c := Seq(1, 2, 3).Cycle; // [1,2,3,1,2,3,1,2,3,1,2,3,…] 
В заключение данного пункта проиллюстрируем изученные возмож-
ности, связанные с бесконечными последовательностями, решив с их по-


Download 1.62 Mb.

Do'stlaringiz bilan baham:
1   ...   24   25   26   27   28   29   30   31   ...   71




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling