- •Оглавление введение
- •Глава 1. Основы работы с системой автокад. Базовый графический редактор
- •1.1. История создания системы Автокад
- •1.2. Интерфейс пользователя Автокада
- •1.3 Команды панели Рисование
- •1.4. Команды панели Редактирование
- •1.4.1. Расчленение объектов
- •1.4.2. Удаление объектов
- •1.4.3. Перемещение набора объектов
- •1.4.4. Копирование набора объектов
- •1.4.5. Поворот набора объектов
- •1.4.6. Рисование подобных объектов
- •1.4.7. Повторение набора объектов
- •1.5. Команды панели Редактирование 2
- •Глава 2. Команды и приемы оформления конструкторско-технологической документации
- •2.1. Методика создания чертежей деталей кузнечно-штамповочных машин с использованием базовых команд
- •2.2. Нанесение текстовых надписей и обозначений с использованием базовых команд
- •2.3. Приемы и команды оформления документации с применением специализированных программ-надстроек
- •2.4. Получение твердых копий разработанной документации
- •Глава 3. Основы работы в трехмерном пространстве
- •3.1. Подходы к проектированию в трехмерном пространстве
- •3.2 Создание твердотельных моделей сборочных единиц кузнечно-штамповочного оборудования базовыми средствами Автокада
- •3.3 Получение реалистичных изображений деталей базовыми средствами Автокада
- •Глава 4. Программирование на autolisp
- •4.1. Классификация языков программирования
- •4.2. Язык Лисп
- •4.3. Вычисления в AutoLisp
- •4.4. Запись команд
- •4.5. Предикаты, логические операторы и условные выражения
- •4.6. Основы параметрического проектирования
- •Заключение
- •Библиографический список
- •Imageframe
- •Imagequality
- •Insertobj
- •Interfere(взаимод)
- •Intersect(пересеки)
- •Vplayer (вслой)
- •Vpoint (т3рения)
- •Vports (вэкран)
- •Xattach
- •Xbind (добавь)
- •Xclip(ссподрежь)
- •Xline(прямая)
- •Xref (ссылка)
- •394026 Воронеж, Московский просп., 14
4.2. Язык Лисп
Рассмотрим язык Лисп, созданный американским ученым Джоном Маккарти в 1957 в Массачусетском технологическом институте (там он и работает по сей день) и нашедший широкое применение.
Название языка официально означает LISt Processing, а неофициально - Lots of Idiotic Silly Parentheses. Лисп отличается высокой компактностью - ядро интерпретатора занимает 4..10Кб, функциональным стилем программирования и использованием обратной польской нотации.
Основное понятие языка Лисп - список.
Список - перечень атомов или списков, отделенных друг от друга пробелами и заключенных в скобки.
Как видно из определения, списки могут быть вложенными. А что же такое атом в Лиспе? Это простой (в отличие от списка) тип данных: число, символьная строка, функция.
Внимание: в Лиспе нет различия между текстом программы и обрабатываемыми ею данными!
В других языках (например, в Паскале) программа (PROCEDURE, FUNCTION) и данные (VAR, CONST) жестко разделены. В Лиспе же и данные, и текст программы являются списками. Разумеется, список, являющийся программой, включает в себя атомы-функции, которые и вызываются при выполнении программы. То, что с программой можно работать, как с данными, и определяет возможность динамической модификации текста программы, что является свойством языков искусственного интеллекта. Как же отличить список-программу от списка-данных?
В Лиспе по умолчанию любой список является программой и интерпретатор будет пытаться ее выполнить. Если список - не программа, а данные, надо явно отключить его интерпретацию.
Из того, что текст программы - тоже список, вытекает необходимость использования специальной системы его записи - обратной польской нотации (названа так по причине изобретения ее польским математиком Яном Лукасевичем). Вызов любой функции в данной нотации записывается как список следующего вида:
(1.2)
где - аргументы функции.
Например, если функция сложения двух чисел имеет имя "+", то операция 2+3 запишется как ( + 2 3 ). В качестве аргументов могут фигурировать другие функции, что позволяет записывать сколь угодно сложные формулы в обратной польской нотации.
Пусть дана функция . В обратной польской записи она приобретет следующий вид:
( * ( / ( + ( * 2 x ) 3 ) ( - y 1 ) ) ( - y x ) ).
Теперь рассмотрим конкретную реализацию языка Лисп - встроенный в САПР AutoCAD интерпретатор языка AutoLISP (Автолисп). Выбор столь экзотического языка в качестве встроенного для столь популярной САПР вызван тем, что список - оптимальный способ представления графической информации, а также легкостью реализации и небольшими размерами интерпретатора. Однако следует признать относительно большую трудоемкость разработки программ на Автолиспе. Зато программы на Автолиспе отличаются чрезвычайно высокой надежностью; за многие годы работы ошибок в работе интерпретатора не выявлено.
Начнем с атомов. Атом в Автолиспе является аналогом указателя на динамическую переменную в Паскале и представляет собой ссылку (адрес) ячейки памяти, начиная с которой записана та или иная информация.
Каждый атом имеет имя, дающееся по следующим правилам - допускаются английские буквы, цифры, большинство имеющихся на клавиатуре знаков за исключением ";", "(", ")", ".", "," ," ", строчные и заглавные буквы не различаются, первым символом должна быть буква.
Буква T зарезервирована и не должна использоваться в качестве имени атома. Слово NIL зарезервировано и не должно использоваться в качестве имени атома. Использование в качестве имени атома имени встроенной функции приведет к потере работоспособности этой функции до перезагрузки AutoCADа.
Длина имени формально не ограничена, но для экономии памяти настоятельно рекомендуется не превышать длину в шесть знаков.
Итак, программист в тексте программы дает атому имя, а интерпретатор Автолиспа сам динамически выделяет память под содержимое атома и автоматически определяет тип и размер хранящейся в атоме информации.
Автолисп поддерживает следующие типы данных:
целое число со знаком от -32768 до 32767 или от 0 до 65535 (2 байта) без знака;
вещественное число, записываемое через десятичную точку: 10.52 или в экспоненциальном формате: 2.52Е-12;
строка символов длиной до 127 знаков, заключенная в двойные кавычки. Символ "\" является служебным и, если он нужен в тексте, должен удваиваться: текст "3\2" запишется как "3\\2". "\" используется для обозначения перевода строки: "\n", возврата каретки: "\r" и табуляции: "\t";
логический тип, принимающий два возможных значения: истина (обозначатся Т) или ложь.(обозначается NIL);
ссылка на встроенную функцию языка;
ссылка на созданный программистом список (программу или данные);
ссылка на переменную;
ссылка на таблицу диспетчера виртуальной памяти.
Объекты. В AutoLISP имеются два общих типа объектов - АТОМЫ и СПИСКИ. Атомы - простые объекты; списки - сложные объекты. Атомы и списки взаимно исключающие. Что-нибудь что является атомом не может быть список, и наоборот.
СПИСКИ
Списки - сложные объекты, упоминаемые в некоторых описаниях как символические выражения, или " s-выражения ". Списки сформированы вне атомов и ( или ) других списков. Список синтаксически прост; он должен ограничиваться согласованными круглыми скобками, и объекты внутри списка должны отделяться от друга друга пробелом.
Примеры списков:
( + 1 3 ) ; Сложить 1 и 3
( - 9 5 ) ; Вычесть 5 из 9
( + 1 ( + 2 3 )) ; Добавить 1 к результату сложения 2 и 3
Что-нибудь ограниченное согласованными круглыми скобками должно быть списком; что-нибудь не ограниченное согласованными круглыми скобками должно быть атомом.
Индивидуальные члены списка известны как элементы. Элементы списков могут быть или атомами или другими списками.
В AutoLISP имеется один объект, который является и атомом и списком. Это - пустой список; то есть список не имеющий никаких элементов, обычно называемый НУЛЬ (NIL).
( ) или нуль
Нуль ( пустой список ) в AutoLISP не "никакое значение". Когда объект в AutoLISP не имеет никакого значение, тогда значение объекта - нуль.
Типы данных. Типы данных описывают характер данных, что атом должен содержать, и количество места ( или памяти ) которое AutoLISP должен выделить чтобы создать атом и сохранить его значение. AutoLISP поддерживает следующие типы данных:
Список;
Символы;
Строки;
Вещественные числа;
Целые числа;
Описатели файла;
"Имена" примитивов AutoCAD;
Наборы выбор AutoCAD;
встроенные функции.
Для определения типа данных любого объекта может быть использована функция языка AutoLISP (type), которая берет один требуемый параметр, и возвращает символ, который указывает тип данных параметра.
Например, определить тип данных целого числа 1.
Команда: ( type 1 )
INT