Главная Длительная эволюция [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.0019 |