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

[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]

{{1,3},{2,2},{3,4},{1,2}}

Вот одно из лучших решений задачи. Сначала список / преобразуется в список

11 = {#,1}&/Ш

{{1,1},{1,1},{1,1},{2,1},{2,1},{3,1},{3,1}, {3,1},{3,1},{1,1},{1,1}

а затем применяется последовательность локальных преобразований:

ll .{x ,{a ,k-}i{a-,m },y . } :> {х,{а,к--m},y} {{1,3},{2,2},{3,4},{1,2}}

Еще одним примером, позволяющим понять работу ReplaceRepeated, будет сортировка по убыванию численного списка. Пусть требуется расположить элементы списка

1= {2,5,3,1,4};

так, чтобы последующий элемент был строго меньше предшествующего. Вот решение этой задачи с помощью локальных правил:

1 .{х -,а ,Ь ,у } :> {x,b,a,y}/;a<b {5,4,3,2,1}

Упражнения

1. Пусть 1 = {{0,а,Ь,с},{0,1,2},{0,х},{0}} есть список, представляющий собой верхнюю треугольную часть кососимметрической матрицы m четвертого порядка. Реализуйте следующий способ восстановления матрицы m по списку 1. Сначала с помощью локальных правил преобразований получите из 1 список И, дополнив спереди нулями . элементы I так, чтобы И стала матрицей четвертого порядка. Затем получите m как И -Tran8pose[ll].



2. Вронскианом семейства функций {/ь/г, • •.,/п} от одного аргумента называется детерминант матрицы {{/ь••,/п}.{/ь i/n}.- •, {/i".-•(/""}}• Определите функцию wronsk от двух аргументов, первый из которых есть список функций, второй - аргумент функций, вычисляющую вронскиан.

3. Определите функцию ord, которая, будучи примененной к частной производной функции с произвольным заголовком, т.е. к выражению вида

Derivative[ni,n2,. • •][f][x,y,...],

имела бы значением порядок производной. Дать по крайней мере два решения: один в функщюнальном стиле, другой в стиле локальных правил преобразований.

4. Используя локальные правила преобразований, дайте определение фушадаи newton, которая осуществляет процесс итераций для нахождения корней функций с заданной точностью. Функция должна иметь три аргумента: заголовок функции, начальное приближение и точность.

5. Определите функцию crossproduct, которая по заданным векторам трехмерного пространства вычисляла бы их векторное произведение.

6. Напишите определение для функции dirderiv, которая по задаишо-му вектору трехмерного пространства и функции, определенной на этом пространстве, вычисляет производную функции по направлению вектора. Считайте систему координат фиксированной, поэтому для задания фушадаи достаточно ее заголовка.

7. С помощью локальных правил определите функцию decode, преобразующую списки вида {{в,2}, {6,5},...} в списки {а,а,Ь,Ь,Ь,Ь,Ь...}.

8. Определите функцию subsets, порождающую все подмножества заданного непустого множества. Реализуйте следующую конструкцию: при фиксированном произвольном элементе непустого множества все его подмножества распадаются на два класса. В первый класс попадают все подмножества, содержащие фиксированный элемент, во второй класс - все остальные.

9. Определите независимо от функции subsets функцию ksubsets, порождающую все ik-элементные подмножества заданного непустого множества. Определение должно быть основано на той же конструкции, что и в случае функции subsets.



Глава 7

ПРОЦЕДУРНОЕ ПРОГРАММИРОВАНИЕ

Несмотря на то что наиболее естественными для „Математики" стилями программирования являются функциона.1ь-ный стиль и стиль определений, или правил преобразований, „Математика" содержит средства и конструкции, позволяющие программировать в традиционном процедурном стиле языков Фортран, Паскаль, Бэйсик и им подобных. Кроме того, некоторые функции процедурного программирования, такие, как If, Which, часто используются и вне процедурного стиля. В принципе все программы процедурного стиля имеют свои аналоги в упомянутых ранее стилях, причем гораздо более эффективно отлаживаемые, выполняемые и понимаемые. Средства процедурного программирования, таким образом, могут рассматриваться как уступка тем пользователям, которые привыкли к процедурным языкам, с целью облегчить им освоение языка программирования „Математика".

7.1. Составные выражения. Оператор Do

Одним из основных операторов процедурного программирования является оператор присвоения. В „Математике" таковым является описанный ранее оператор Set, который во входной инфиксной форме выглядит как =, например х = а, или X = х --1. В отличие от многих других процедурных языков в „Математике" не нужно заботиться об описании типа переменных, и одному и тому же символу можно присвоить целочисленные, вещественные, комплексные, символьные и т.д.



[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.0009