![]() |
Главная Длительная эволюция [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] Атрибут Oneldentity, в отличие от ранее рассмотренных атрибутов, воздействует только на процесс сопоставления выражений шаблонам. Он означает, что с точки зревия соответствия шаблонам выражения f[x], f[f[x]] и т.д. для функций f, обладающих атрибутом Flat, эквивалентны х. Рассмотрим несколько примеров, разъясняющих суть дела. Пусть сначала функция f не обладает никакими атрибутами. Вычислим выражение: f[f[x]]/.f[z ]:>z2 fix? В рассматриваемом случае „Математика" отождествила заголовок шаблона с заголовком выражения f[f[x]], а шаблон z. с подвыражением f[x]. Присвоим функции f атрибут Flat Set Attributes[f, Flat] и вновь вычислим рассматриваемое выражение. f[f[x]]/.f[z ] :> z2 fix? Результат не изменился, так как при сопоставлении с шаблонами учитывается не только вычисленное выражение f[f[х]], но и его исходная форма. Допустим, что функция f обладает и атрибутом Flat, и атрибутом Oneldentity. SetAttributes[f, {Flat, Oneldentity}] f[f[x]] /. f[z.] :> z2 Мы видим, что результат таков, как если бы функция f была аналогична, скажем, функции Plus в том смысле, что ее применение к единственному аргументу ничего не изменяет: Plus[5] после вычисления дает 5. Атрибут Constant присваивается символам, которые должны вести себя как константы по отношению к операторам дифференцирования. Attributes[f] =. D[f[x],x] Set Attributes[f, Constant] D[f[x],x] Подобно тому как атрибут Protected препятствует присвоению нижних значений (DownValues) символам, атрибут Locked не позволяет изменять атрибуты символов. Set Attributes[f, Locked] Attributes[f] {Constant, Locked) Clear Attributes[f, {Constant, Locked}] Attributes:: locked: symbol f is locked Придется начать новую сессию „Математики", если возникнет необходимость изменить атрибуты симюла f. Будем считать, что мы это сделали, поскольку мы будем использовать ниже символ f. Если функции какого-либо пакета снабжены атрибутами Protected и Locked, то пользователь не сможет изменить функций, определенных в этом пакете, если он подгружен. Атрибут ReadProtected не позволяет прочитать определений, ассоциированных с символом, с помощью функции Information. f = .; f[x ]:=x-3 ?f Globalf f[x.]:=x-3 Set Attributes[f, ReadProtected] ?f Global/ Atributes[f] = {ReadProtected} Есля символ снабжен атрибутами ReadProtected и Locked, то в текущей сессии нельзя узнать ассоциированных с ним определений. 8.3. Стандартный процесс вычислений При вычислении выражений „Математика" руководствуется следующими принципами, некоторые из которых были рассмотрены в начале этой главы. 1. Вычисленные ранее выражения, а также строки, числа и символы, не имеющие собственных значений (OwnValues), не изменяются. 2. Порядок и ход вычислений контролируются заголовками выражений и подвыражений. 3. Стандартный порядок вычислений означает, что сначала вычисляется заголовок выражения, потом непосредственные подвыражения последовательно слева направо. 4. На самых ранних стадиях вычислений символы заменяются на присвоенные им собственные значения. 5. Если в процессе вычисления ни одна часть выражения не изменилась, вычисления прекращаются. 6. После того как вычислен заголовок выражения (или заголовки подвыражений), выполняются последовательно преобразования, индуцированные атрибутами Flat, Listable и Orderless. [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.0013 |