Выбрать главу

Любой язык программирования, встречая некоторую именованную переменную, сопоставляет ей ее значение. Это значение в операторных языках обычно вычисляется и присваивается переменной с помощью оператора присвоения. Особенностью Автолиспа является то, что в переменной может храниться не только вычисленное значение, но и целое выражение. Этот язык содержит в своем составе функцию quote, позволяющую сохранить выражение без его оценки. Формат функции:

(quote выражение),

например:

(quote а) возвращает А,

(quote (a b c)) возвращает (А В С),

(quote (+ 1 4)) возвращает (+ 1 4).

В практике создания программ слово quote заменяется апострофом. Автолисп совершенно одинаково воспринимает и обрабатывает записи:

(quote (a b c)) и '(a b с).

Основной функцией присвоения переменной ее значения является функция

(setq перем1 выраж1 [перем2 выраж2 ...]).

Функция setq, позволяет присвоить значения нескольким переменным, однако возвращает только последнее выражение. Например:

(setq a 5.4) возвращает 5.4,

(setq a 5.4 b 8.7 с “width”) возвращает "width”,

(setq x ‘(a b)) возвращает (A В).

На примере функции setq хорошо видно действие функции quote. Так, например:

(setq x (+ 1 4)) возвращает 5,

(setq x ‘(+ 1 4)) возвращает (+ 1 4).

Поскольку функция quote сохраняет выражение без его оценки, элементы этого выражения, по сути дела, являются списком. Поэтому для записи такого выражения во многих случаях можно использовать функцию организации списков list. Следующие два примера определения точки на чертеже для Автолиспа эквивалентны:

(setq pt1 ‘(3.0 4.5)),

(setq pt1 (list 3.0 4.5)).

Поскольку Автолисп всегда проверяет, является ли первый элемент выражения функцией, то выражение типа

(setq pt1 (3.0 4.5))

не будет принято; Автолисп выдаст сообщение об ошибке (в данном случае bad function, т.е., неверная функция), так как численный параметр 3.0 представляет собой вещественное число, а не функцию.

2. МАТЕМАТИКА В АВТОЛИСПЕ

2.1. Функции обработки чисел

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

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

C=A+B

или в Паскале

c:=a+b

в Автолиспе выглядит как

(setq с (+ a b)).

Сказанное относится и ко всем остальным операциям. Ниже приводится перечень наиболее употребительных функций.

(+ число число ...). Функция возвращает сумму всех чисел. Числа могут быть как целыми, так и вещественными. Сумма целых чисел есть целое число. Если среди чисел есть хотя бы одно вещественное, результат - вещественное число. Например:

(+ 3 5) возвращает 8,

(+ 1 2 3 4.5) возвращает 10.5,

(+ 1 2.0 3 4 5) возвращает 15.0.

(- число [число] ...). Функция вычитает второе число из первого и возвращает результат. Если чисел несколько, то возвращается результат последовательного вычитания всех последующих чисел из первого. Если число одно, его знак меняется на обратный. Примеры:

(- 5 3) возвращает 2,

(- 18 4.5 6 2) возвращает 5.5,

(- 6) возвращает -6.

(* число [число] ...). Функция возвращает произведение всего рядя чисел. Если введено одно число, возвращается результат его умножения на единицу. Примеры:

(* 5 3) возвращает 15,

(* 2 3.5 4 6) возвращает 168.0,

(* 3) возвращает 3.

(/ число [число] ...). Функция возвращает результат деления первого числа на произведение всех последующих. Единственное введенное число делится на единицу. Примеры: