Функции Fixed Point и Catch
Функции Fixed Point и Catch
В функциональном программировании вместо циклов, описываемых далее, может использоваться следующая функция:
-
FixedPoint [ f, expr ] — вычисляет expr и применяет к нему f, пока результат не перестанет изменяться;
-
FixedPoint [ f, expr, SameTest->comp] — вычисляет expr и применяет к нему f, пока два последовательных результата не дадут True в тесте SameTest.
Пример применения функции FixedPoint:
FixedPoint[Function[t, Print[t]; Floor[t/2]], 27]
27
13
6
3
1
0
0
Последний результат (ноль) выводится в отдельной (нумерованной) ячейке вывода и означает завершение процесса итераций — деления t на 2.
Следующий пример показывает, как можно создать цепную дробь с помощью функции Nest:
Nest[ Functiontt, 1/(1+t)], у, 3 ]
1/(1/(1/((1+y)+1)+1)+1)
Еще одна функция такого рода — это 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[ x, a, f ]
х
Catch[ Throw[ x, у ], у, fun ]
fun[x, у]
Catch[ NestList[l/(# + 1)&, -3, 5] ]
{-3,-1/2, 2, 1/3, 3/4, 4/7}
Catch[ NestList[l/(# + 1)&, -3., 5] ]
{-3., -0.5, 2., 0.333333, 0.75, 0.571429}
Catch[Do[Print[i]; If[i > 4, Throw[i+2]], i, 10]]
1
2
3
4
5
7
Содержание раздела