Programming Taskbook 0
Download 1.62 Mb. Pdf ko'rish
|
Abramyan-Pascal2016-1
- Bu sahifa navigatsiya:
- [2,2,2,2,2,2,2,…]
- [2,5,8,11,14,17,20,…]
- [1,2,3,1,2,3,1,2,3,1,2,3,…]
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,…] В заключение данного пункта проиллюстрируем изученные возмож- ности, связанные с бесконечными последовательностями, решив с их по- |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling