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

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