Опубликован: 03.12.2012 | Доступ: свободный | Студентов: 1102 / 247 | Длительность: 16:43:00
Лекция 11:

Программирование, основанное на правилах преобразований

При помощи задания верхних значений можно строить простейшие базы данных (Е. М. Воробьёв [1, с. 146]). В примере на рис. 10.4 мы создаём базу данных о галилеевых спутниках Юпитера. Мы задаём информацию о массе спутника как верхнее значение выражения Mass[satname], где satname — название спутника (Io, Callisto, Europa и Ganymede), а также о размерах спутника и дате открытия — верхние значения выражений Dimension[satname] и OpeningDate[satname], соответственно. Теперь узнать информацию о спутнике satname можно, задав выражение ?satname. В примере In[13] на рис. 10.4. мы выводим данные о спутнике Ганимед, введя ?Ganymede.

Подробней о присвоении верхних значений см. книгу Е. М. Воробьёва [1, с. 145–148].

Присвоение верхних значений выражений для создания простейших баз данных

Рис. 10.4. Присвоение верхних значений выражений для создания простейших баз данных

Есть в Mathematica и понятие нижних значений, которое тесно связанно с хорошо известными нам по предыдущей лекции пользовательскими функциями.

В примере In[1] на рис. 10.5 зададим функцию DoubSqr, возводящую в квадрат заданное выражение и удваивающую полученный результат. Теперь DoubSqr[expr] для любого выражения expr будет заменяться выражением 2 expr2 (пример In[2]). Это правило преобразования и будет составлять одно из так называемых нижних значений заголовка DoubSqr.

С любым заголовком можно ассоциировать любое количество нижних значений (Е. М. Воробьёв [1, с. 142]). Например, если мы хотим, чтобы при значении expr, равном 0, функция DoubSqr давала значение 1, зададим нижнее значение выражению с заголовком DoubSqr и аргументом 0 — пример In[3] на рис. 10.5.

Вывести на экран нижние значения, ассоциированные с заголовком arbhead, можно, применив к нему функцию DownValues. Е. М. Воробьёв [1, с. 143] отмечает, что если заголовок ассоциирован с несколькими нижними значениями, то Mathematica будет применять правила преобразований в том порядке, в котором они даны в DownValues: более частные правила предшествуют более общим. Именно поэтому в нашем примере выражение DoubSqr[0] при вычислении даст результат 1, а не 0 — пример In[4] на рис. 10.5.

Теперь попробуем изменить порядок присваивания нижних значений. Присвоим сначала некоторому выражению CubSqrt[4] значение 1000, а затем зададим пользовательскую функцию CubSqrt[x_], возводящую выражение в аргументе в степень 3/2 — примеры In[5] и In[6] на рис. 10.5. В примере In[7] при помощи функции DownValues ознакомимся со списком нижних значений выражения CubSqrt: в Out[7] мы найдём значения, заданные как в In[6], так и в In[5].

Если одному и тому же выражению последовательно присваивается несколько нижних значений (пример In[8] на рис. 10.5), то окончательно присвоенным оказывается то, которое присваивалось позже остальных (пример In[11]).

Подробней о присвоении нижних значений см. книгу Е. М. Воробьёва [1, с. 142–144].

Задание глобальных правил преобразования присваиванием нижних значений

Рис. 10.5. Задание глобальных правил преобразования присваиванием нижних значений