* Данный текст распознан в автоматическом режиме, поэтому может содержать ошибки
1074
Программирование в системах компьютерной алгебры
Пример применения функции FixedPoint:
FixedPoint[Function[t, Print[t]; Floor[t/2]], 27] 27 13 6 3 1 0 0
Последний результат – 0 – выводится в отдельной (нумерованной) ячейке вывода и означает завершение процесса итераций – деления t на 2. Следующий пример показывает, как можно создать цепную дробь с помощью функции Nest:
Nest[ Function[t, 1/(1+t)], y, 3 ]
Еще одна функция такого рода – это Catch: • Catch[expr] – вычисляет expr, пока не встретится Throw[value], затем воз вращает value; • Catch[expr, form] – вычисляет expr, пока не встретится Throw[value,tag], затем возвращает value; • Catch[expr, form, f] – возвращает f[value, tag] вместо value. Ниже представлены некоторые конструкции циклов с оператором Catch:
Catch[ Throw[ x, y ], y, fun ] fun[x,y] Catch[ NestList[1/(# + 1)&, -3, 5] ]
Catch[ NestList[1/(# + 1)&, -3., 5] ] {-3.,-0.5,2.,0.333333,0.75,0.571429}
14.3.6. Реализация рекурсивных и рекуррентных алгоритмов
Рассмотрим несколько простых примеров, выявляющих суть функционального программирования. Вначале пусть это будет пример, в котором задана функция scn[x,n], вычисляющая сумму синуса в степени n и косинуса в степени n:
scn[x_,n_]:=Sin[x]^n+Cos[x]^n scn[1,2] Cos[1]2 + Sin[1]2 scn[x,2] Cos[x]2 + Sin[x]2