Иллюстрированный самоучитель по Mathematica 3/4

Использование процедур

В основе процедурного программирования лежит понятие процедуры и типовых средств управления – циклов, условных и безусловных выражений и т. д. Процедурный подход – самый распространенный в программировании, и разработчики Mathematica были вынуждены обеспечить его полную поддержку. Однако программирование систем Mathematica и в этом случае остается функциональным, поскольку элементы процедурного программирования существуют в конечном счете в виде функций.

Процедуры являются полностью самостоятельными программными модулями, которые задаются своими именами и отождествляются с выполнением некоторой последовательности операций. Они могут быть заданы в одной строке с использованием в качестве разделителя символа ";" (точка с запятой). Вот пример задания однострочной процедуры, отождествленной с именем г:

r = (1 + x)^2; r= Expand[r]; r -1
2X+X2

Обратите внимание на то, что в теле процедуры символ г используется как вспомогательная переменная. Эта процедура возвращает символьное выражение:

Expand[(1 + x) ^ 2] - 1

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

Для задания процедуры со списком локальных переменных {а, b,…} и телом ргос может использоваться функция Module [ {а, b,…},ргос]. С применением этой функции мы столкнемся позже.

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

  • Block [{x, у,…}, procedure] – задание процедуры с декларацией списка локальных переменных х, у,…;
  • Block[{x = х0, у=у0,…}, procedure] – задание процедуры с декларацией списка переменных х, у,… с заданными начальными значениями.

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

g[x_]: = Block[{u}, u = (1 + x)^2; u = Expand[u] ] g[a + b]
1+2a+a2+2b+2ab+b2
u
u
u = 123456; g[2]
9
u
123456

Обратите внимание: последние действия показывают, что переменная и, введенная в тело базовой структуры, является действительно локальной переменной, и присвоение ей символьного выражения (1 + х) ^ 2 в теле блока игнорируется вне этого блока. Если переменная и до применения в функции была не определена, то она так и остается неопределенной. А если она имела до этого некоторое значение (в нашем случае – 123 456), то и по выходе из процедуры она будет иметь это значение.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.