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

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

Глава 8

ВЫЧИСЛЕНИЕ ВЫРАЖЕНИЙ

Мы уже упоминали, что важнейшими понятиями, относящимися к компьютерной алгебре. „Математика", являются вы-ражение и вычисление. Выражения подробно рассматривались в главе 4, наступило время познакомиться с принципами вычисления выражений. Самым существенным обстоятельством, которое здесь следует принять во внимание, является то, что рассматриваемая компьютерная алгебра есть система, вычислительный процесс в которой основан на правилах преобразований. Это означает, что при вычислении выражений последовательно применяются правила преобразований до тех пор, пока выражение не перестанет изменяться. Отсюда следует, что если вычисленное выражение, помещенное в выходную ячейку, вновь ввести во входную, то результат будет совпадать с введенным выражением. Более того, с введенным вычисленным выражением не будет происходить вообще никакого вычисления, в чем можно убедиться с помощью функции Trace:

Sin[x-j-l] Trace

{{x + l,l + x},Sin[l + x]}

Sin[l -f- x] / / Trace {}

Такой результат объясняется тем, что каждое выражение „Математики", за исключением чисел и строк, снабжается двумя метками, одна из которых несет информацию о времени вычисления выражений. Если эта метка не пуста, то выражение попросту не вычисляется. Вторая метка несет информацию



о наличии „ссылок" на выражение. Например, выражение может быть присвоено в качестве значения какому-то другому выражению, и зто другое выражение является ссылкой. Глобальное выражение Out[n] также является ссылкой. Выражение удаляется из памяти, если на него отсутствуют ссылки. Итак, вычисленное однажды выражение больше не вычисляется, т.е. не изменяется. В этом смысле не вычисляются также числа и строки. Таким образом, процесс вычислений существенно опирается на вычисление символов.

8.1. Значения, ассоциированные с символами

Напомним, что с каждым символом могут быть связаны следующие четыре типа правил преобразований. Если символу присвоено некоторое выражение с помощью функции Set, то это выражение является одним из собственных значений (OwnVal-ues) символа.

x = f[y,z]

OwnValues[x]

{Literal[x]:> f[y,z]}

Смысл функции Literal будет объяснен позже, а сейчас мы обратимся к другим правилам. Если символ является заголовком выражения, то с ним ассоциируются правила преобразований, которые называются его нижними значениями (Down-Values).

g[x ,y„] :=х--у DownValues[g] {Literal[g[x.,y.]]:>x + y}

Правила преобразований, которые определяют верхние значения (UpValues) символа, ассоциируются с символом, если он находится на первом уровне некоторого выражения.



х/: {х,у ,2-} = {х y,xz} UpValues[x]

{Literal[{x,y.,zJ}] :> {xy,xz}}

{x,a,b} {ax,bx}

Если символ является заголовком заголовка некоторого выражения, то с ним могут быть ассоциированы его дальние значения (Sub Values).

h[x-][y ] :=х[у]

h[v][a,b]

v[a,b]

SubValues[h]

{Literal[h[x.][y..] :> x[y]}

8.2. Атрибуты

Кроме правил преобразований, ассоциированных с символом symb, последний может быть снабжен некоторыми атрибутами, наделяющими функцию с заголовком symb определенными свойствами. С атрибутами Protected и bistable, которыми обладали некоторые встроенные функции, читатель уже знаком. Ниже мы более подробно остановимся на этих и других атрибутах и способе присвоения атрибутов символу. Ранее в гл. 5 нами была определена функция cube соотношением

cube[x ] := х"3

Если мы вычислим функцию cube от списка, то получим следующий интересный результат:

cube[{a,b,c}] {aЬcЗ}



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