Главная  Длительная эволюция 

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [ 54 ] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86]

значения. Операции присвоения можно повторять несколько раз подряд, располагая их в одной ячейке и разделяя последовательные выражения знаком ; (точка с запятой):

х = 5; х = х--1; х = х--2 8

Разделенные точкой с запятой и идущие одно за другим выражения „Математики" являются сами по себе выражением с заголовком CompoundExpression, который мы будем переводить как составное выражение.

FullForm[Hold[x =5; х = х-Н1; х = х + 2]]

Н old[CompoundExpression[Set[x, 5],Set[x,Plus[x, 1]]

Set[x,Plus[x,2]]]]

Как в правой, так и в левой частях оператора присвоения могут стоять произвольные выражения „Математики", поэтому нам не надо останавливаться на арифметических, логических и других операциях, поскольку они нами ранее использовались.

Оператором, в известном смысле имитирующим CompoundExpression, является оператор Do. Приведем его возможно более полное описание. Выражение Do[expr,{imax}] при его выполнении imax раз вычисляет выражение ехрг. Оно полностью эквивалентно выражению ехрг; ехрг;...; ехрг;, в котором точка с запятой поставлена и после последнего выражения ехрг. Таким образом, в результате вычисления рассматриваемых выражений в выходную ячейку ничего не помещается, хотя ехрг вычислено.

t = 3; Do[t = t--l/t,{3}] t

12781 3270

Если желательно сразу вывести на экран значение i, то нужно ввести следующее составное выражение:



t = 3; Do[t = t--l/t,{3}];t

12781

3270

В рассматриваемом случае применение оператора Do полностью эквивалентно применению функции Nest в виде Nest[(# + l/#)&,3,3].

Выражение Do[expr, {i, imax}] при его выполнении вычисляет гтах раз выражение ехрг, которое может содержать символ г. При этом t изменяется от 1 до imax с шагом единица.

t = 3;Do[t = t-Hi, {i,3}];t 9

Списки {3} или {i,3} в операторе Do называются итераторами. Итератор может быть задан и в виде {i,imin,imax,step}, где imin - начальное значение i, imax - конечное значение, step - шаг изменения г. Если параметр step отсутствует, то он по умолчанию считается равным единице. Параметр i может быть любым выражением, заголовок которого не имеет атрибута Protected, а параметры imin, imax и step не обязательно числа, но выражение (imax - imin)/step должно быть числом. Кроме того, шаг step может быть отрицательным при условии, что imax меньше imin.

t = 3;Do[t = t + f [x], {f [x],y,3.5y,y}];t З + бу

В операторе Do может быть несколько итераторов:

Do[Print[ia-bj b],{i,3},{j,i}]

а + Ь

2а-f 6

2а-1-26

За-Ьб

За-Ь26

За-Ь3б



Последний рассмотренный пример демонстрирует применение оператора Do для получения так называемых побочных эффектов. В самом деле функция Print не изменила значение ни одного выражения.

Функциями, тесно связанными с Do, являются Sum, Product и Table. Вместо составного выражения

i = 0;Do[i = i+Mc,{j,5}];i

дающего после вычисления следующий результат:

1 + 2* + 3* + 4* + 5* можно ввести выражение с заголовком Sum:

SumU-k,{j,5}] 1 + 2= + 3* + 4= + 5* Аналогичные вычисления выполняет функция Product.

ProductU-k,{j,5}] 2*3*4*5*

7.2. Условные операторы

Условные операторы позволяют ветвить вычисления в зависимости от выполнения одного или нескольких условий, выраженных предикатами. Выражение

If [test, exprl, ехрг2]

имеет значением вычисленное выражение exprl, если test вычисляется на True, и вычисленное выражение ехрг2, если значение test равно False. Если же test не вычисляется ни на True, ни на False, то исходное выражение с заголовком If остается невычисленным.

{If[3 < 7,х,у], If[3 > 7,х,у1, If[z < 7,х,у]} {x,y,If[z<7,x,y]}



[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [ 54 ] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86]

0.0008