fbed99da

Функции 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

 



Содержание раздела