Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Лекция 11. Типы данных и основы языка Lisp



Язык программирования AutoLISP— это вариант языка LISP, в который добавлены функции доступа к объектам, таблицам и словарям системы AutoCAD. Основой языка LISP является работа со списками, которые могут иметь произвольную длину и включать элементы разной природы (числа, текстовые строки, указатели файлов и т. д.). В то же время в языке доступны обычные арифметические вычисления, логические операции, работа с файлами и т. д. С помощью языка AutoLISP можно писать программы или вводить в командной строке выражения, которые затем вычисляет система AutoCAD. Для чтения и разбора выражений в систему AutoCAD встроен интерпретатор AutoLISP.

За последние годы язык развился за счет новых функций с префиксом vi-, а также функций, предоставляющих доступ к объектной модели AutoCAD и реализующих элементы технологии ActiveX. Такие функции (довольно условно) отнесены к языку Visual LISP. Для простоты объединение языков AutoLISP и Visual LISP будем называть просто LISP.

Форма вычисляемых выражений языка AutoLISP:

(< функция> [< аргумент1> [< аргумент2> ... [< аргументы> ]...]])

Здесь < функция> — это ИМЯ функции, < аргумент1>, < аргумент2>, < аргументы> — аргументы функции, разделяемые, по крайней мере, одним пробелом

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

Квадратные скобки в приведенной форме указывают на возможное отсутствие находящихся между ними аргументов. Количество аргументов зависит от син­таксиса функции. Существуют функции, которые вызываются без аргументов.

Основное правило AutoLISP— баланс скобок, т.е. количество открывающих скобок должно быть равно количеству закрывающих.

 

Функция setq и точность отображения

 

Интерпретатор LISP вычисляет значение каждого введенного выражения и возвращает его в среду AutoCAD. Возвращаемое значение, в свою очередь, либо может быть передано для дальнейших вычислений в выражение более высокого уровня, либо может быть сохранено в переменной (человеку, знакомому с программированием, ясно, что это— именованные участки памяти для хранения данных) с помощью функции присвоения setq, имеющей следующий синтаксис:

(setq < переменная1> < выражение1> [< переменная2> < выраженле2> ...

[< переменнаN> < выражениеN> ]... ] }

Функция setq может использоваться с любым количеством аргументов, которое должно быть обязательно четным и не менее двух. В качестве аргументов < пере менная1>, < переменная2> и т.д. могут использоваться любые символы (имена) LISP, не занятые в наименованиях функций. В качестве аргументов < выражение! >, < выражение2> и т. д. могут использоваться выражения LISP, имена переменных или константы (например, числа).

Функция setq— основное средство для сохранения значений, возвращаемых другими выражениями. Пример:

(setq myd (- (+ 6.832 200.1) (+ 423.1 33.22)))

 

Значение выражения сохранено в переменной myd

По умолчанию в вещественных числах система AutoCAD показывает в командной строке не более шести значащих цифр. Например, если бы в итоге вычисления должен был бы получиться результат 329.65142, то все равно вы бы увидели в командной строке только 329.651. Однако внутри программы AutoCAD оперирует числами с максимальной точностью (15 знаков после десятичной точки).

В текст программы полезно вставлять комментарии, поясняющие, например, особенности алгоритма. Комментарием считается часть строки, начиная с символа “; ” (точка с запятой), после которого не следует сразу же символ “|” (вертикальная черта), и кончая последним символом строки. Закомментированной может быть вся строка программы.

Ecли комментарий нужно вставить в середину строки, тогда начатом комментария должны быть символы “; |” концом комментария — символы “; |” (причем конец комментария может располагаться на другой строке). Примеры (комментарии выделены полужирным шрифтом):

; Закомментирована вся строка

(setq two_pi (+ pi pi) ); Закомментирован конец строки

(setq uv0 ( + 44.73;! внутренний

коментарий |; 20 6.7) )

(command " _.CIRCLE" ‘(14.0 6.6) 150.55); рисование окружности

 

 

Символы LISP — это слова, состоящие из группы буквенно-цифровых знаков и являющиеся именами функции или переменных, используемых для хранения данных пользователя. В символах LISP не должны использоваться разделители выражений, к которым относятся круглые скобки, пробелы и двойные кавычки, и служебные знаки — "." (точка), ", " (запятая), "; " (точка с запятой), (апостроф), " /" (косая черта), (обратная косая черта). Написание символов не должно соответствовать написанию чисел (например, символ не должен состоять из одних Цифр).

Зарезервированными являются символы, используемые как имена функций, а также некоторые обозначения констант

 

Типы данных

LISP работает с данными следующих типов:

· целое число;

· вещественное число;

· строка;

· список, точечная пара, точечный список;

· дескриптор файла;

· указатель функции, приложения;

· примитив AutoCAD;

· набор.

 

Символы

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

Целые числа могут быть как положительными, так и отрицательными или нуля­ми. Диапазон допустимых значений — от-2 147 483 648 до +2 147 483 647.

К целым числам относятся слова, состоящие лишь из цифр. Кроме того, целые числа могут иметь знак (+ или -). Если пользователь пытается задать целое число, не лежащее между описанными выше предельными значениями, то вводимое значение преобразуется в вещественное.

Вещественные числа— это слова, которые состоят из цифр и содержат внутри только одну десятичную точку. Могут иметь знак (- или +). В состав вещественного числа может входить латинский символ е или E с показателем степени числа 10 (научная форма представления вещественных чисел).

 

Вещественные числа не должны начинаться с десятичной точки (например, вместо.5 следует писать 0.5). Допустимые значения вещественных чисел находятся в диапазоне от -1.7976931348623158е+308 до +1.7976931348623158е+308.

Строковые константы начинаются и заканчиваются кавычками (сами кавычки в длину константы не входят) и содержат внутри себя текст, который может состоять из любых знаков, в том числе пробелов, скобок, апострофов. Особо рассматривается знак " \", который является служебным и предназначен для ввода в текстовую строку некоторых специальных знаков (например, кавычек и самого знака " \" ) Константа " " считается строкой нулевой длины. В строковые константы могут входить управляющие знаки печати, например: " \n" — переход на новую строку, " \t" — символ табуляции.

Списковые константы — это списки, состоящие из постоянных элементов любого типа (списки, как и функции, открываются и закрываются круглыми скобками). Для того чтобы AutoCAD не вычислял выражение как функцию, постоянные списки предваряются апострофом перед открывающей скобкой.

· 91

· -25408

· 539.3582

· 777.5е+3

· " Версия для печати"

· " 336\\_5" (первая косая черта является служебной, вторая — значащим символом; если распечатать такую строку, то получим 336\_5)

· '(0.0 0.0 1.0)

· '(" Аа" " Бб" " Вв" " Гг" " Дц" " Ее" )

· '(0 75 " chair" 25 " window" 3 " " " & " )

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

· (0. " POLYLINE" )

· (62. 29)

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

· (120 14. 67) 

Функция setq возвращает значение, совпадающее со значением выражения, присваиваемого последней переменной (< переменнаяN> ), поэтому тип результата совпадает с типом этого выражения.

Предопределенные символы

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

· т — единственная логическая константа, имеющая значение " истина";

· nil— пустое значение (оно же в логических операциях играет роль и значения " ложь" ); это значение не эквивалентно числу 0 или пустой строке (" " );

· pi— постоянная, равная отношению длины окружности к диаметру (3.14159...);

· pause — постоянная, позволяющая ввести паузу при работе команды AutoCAD (используется в функции command).

 

Переменные

Для хранения данных пользователь может вводить свои символы (переменные), не совпадающие по написанию с зарезервированными или ранее занятыми. Создание новых переменных осуществляется с помощью функции setq, например:

(setq rl 15.33 s24 9)

Здесь вводятся переменные rl и s24, получающие, соответственно, значения 15.33 (вещественное) и 9 (целое). При этом к той части оперативной памяти, которая отведена для текущего рисунка, добавляются участки, занимаемые переменными. Если переменной присвоить значение nil, то такая переменная из памяти удаляется, и ее место освобождается для других операций LISP

В многодокументном режиме (когда в одном сеансе AutoCAD открыто несколько рисунков) переменные одного рисунка не доступны в другом рисунке. Для передачи требуется экспортировать переменные во внедокументное пространство имен

 

Функция load

Ввод с клавиатуры выражений LISP не всегда удобен, поэтому можно записать предварительно свои строки на языке LISP в файл с расширением lsp (текст располагается в файле произвольным образом построчно, не обязательно каждое новое выражение начинать с новой строки; желательно заканчивать строку на разделителе— пробеле или скобке), а затем загрузить этот файл с помощью функции load. Синтаксис функции следующий:

(load < файл> [ < ошибка> ] )

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

Например:

(load " e25run.lsp" " Файл не найден" )

Аргумент < ошибка> может быть опущен, в этом случае при ошибке загрузки выдастся стандартное сообщение AutoCAD. Аргумент < файл> обычно содержит имя файла, который ищется в соответствии с настройкой рабочего каталога и путей поиска файлов поддержки. Однако можно указывать и полное имя с путем — например, " c: /D_Progs/e25run.lsp" или " с: \\D_Progs\\e25run.lsp". В качестве разделителя каталогов может использоваться косая черта или обратная косая черта, но обратная черта должна обязательно удваиваться.

Если расширение в имени файла опущено, то AutoCAD пытается выполнить загрузку, поочередно добавляя следующие расширения: vlx, fas, lsp.

Расширение vlx соответствует файлам VLX-приложений, fas— компилированным LISP-файлам или файлам FAS-приложений, lsp— исходным LISP-файлам. Для непосредственного редактирования пользователю доступны только файлы с расширением lsp, т. к. файлы с расширениями vlx и fas не являются текстовыми.

 

Функция vl-load-all

Система AutoCAD разрешает работу одновременно с несколькими открытыми документами (рисунками). Поэтому возникает проблема, загружен ли файл с расширением lsp в конкретный рисунок. Функция load выполняет загрузку только в текущий документ. Для того чтобы обеспечить загрузку LISP-файла во все уже открытые и открываемые в данном сеансе AutoCAD рисунки, следует пользоваться функцией vl-load-all:

(vl-load-all < файл> )

Аргумент < файл> — текстовая строка с именем файла (расширение файла может быть тем же, что и у первого аргумента функции load). Возвращаемого значения нет, если загрузка не выполнилась. Возвращается значение т в случае успешной загрузки.


Поделиться:



Популярное:

Последнее изменение этой страницы: 2017-03-03; Просмотров: 2340; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.028 с.)
Главная | Случайная страница | Обратная связь