Скачиваний:
91
Добавлен:
02.05.2014
Размер:
1.32 Mб
Скачать

Библиографический список

  1. Гладков С.А. Программирование на языке Автолисп в системе САПР Автокад. - М.: “ДИАЛОГ-МИФИ”,1991.- 96с

Наиболее полное изложение языка Автолисп, требующее определенной подготовки читателя в области программирования. Описывается работа с ГБД Автокада, управление памятью в Автолисп, приведен обширный справочник функций. В то же время книга содержит ряд ошибок и неточностей.

  1. Г.А. Бугрименко. Автолисп - язык графического программирования в системе AutoCAD. - М.: Машиностроение, 1992. - 144 с.; ил.

Краткое изложение принципов программирования вообще и основ работы с Автолиспом. Дается множество полезных примеров. Однако изложение возможностей языка весьма неполно.

  1. Хювенен Э., Сеппанен Й. Мир Лиспа. В 2-х тт. М.: Мир, 1985.

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

  1. А. Филд, П. Харрисон. Функциональное программирование. Пер. С англ. - М.: Мир, 1993. - 638с.

Серьезное изложение принципов и теоретических основ функционального программирования, -исчисления и прочих вопросов. Наряду с Лиспом рассматриваются и другие функциональные языки - Hope, Miranda.

ПРИЛОЖЕНИЕ 1

Список основных функций Автолиспа версии 10.0

Условные обозначения:

N - число;

S - текстовая строка;

A - любой атом;

L - любой список;

AL - атом или список;

P - список из двух чисел (координаты точки);

[…] - необязательный параметр;

* - функция может иметь произвольное число аргументов.

V - имя переменной;

E - выражение Автолиспа;

B - логическое значение (T или NIL).

Функция

Параметры

Возвращаемое значение

Описание

Пример

МАТЕМАТИЧЕСКИЕ, ЛОГИЧЕСКИЕ И ГЕОМЕТРИЧЕСКИЕ ФУНКЦИИ

+

N1 N2 [… NM*]

N1+N2+…+NM

Сумма

( + 5 8 )

-

N1 N2 [… NM*]

N1-N2-…-NM

Разность

( - a 5 )

*

N1 N2 [… NM*]

N1*N2*…*NM

Произведение

( * 2 4 r )

/

N1 N2 [… NM*]

N1/N2/…/NM

Частное

( / ( + 2 2 ) d )

=

N1 N2 или S1 S2

B

Проверка равенства двух чисел или строк

( = x 0.5 )

/=

N1 N2 или S1 S2

B

Проверка неравенства двух чисел или строк

( /= a "ABC" )

>

N1 N2 или S1 S2

B

Проверка "N1 больше N2" или "S1 больше S2"?

( > c ( + 3 d ) )

<

N1 N2 или S1 S2

B

Проверка "N1 меньше N2" или "S1 меньше S2"?

( < e 1 )

>=

N1 N2 или S1 S2

B

Проверка "N1 больше или равно N2" или "S1 больше или равно S2"?

( >= f 4.0 )

<=

N1 N2 или S1 S2

B

Проверка "N1 меньше или равно N2" или "S1 меньше или равно S2"?

( <= 5 a1 )

AND

B1 B2

B

Возвращает T, если и B1=T, и B2=T, иначе NIL.

( AND ( = 5 a ) flag )

OR

B1 B2

B

Возвращает NIL, если B1=NIL и B2=NIL, иначе T.

( OR ( = ans "Н" ) ( = ans "н" ) )

NOT

B1

B

Инвертирует логическое значение (меняет NIL на T, T на NIL).

( NOT flag )

ANGLE

P1 P2

N

Вычисляет угол в радианах между вектором P1P2 и положительным направлением оси OX.

( ANGLE a ( LIST 0 0 ) )

COS

N1

N

Возвращает косинус угла N1, заданного в радианах

( COS ( / PI 2 ) )

DISTANCE

P1 P2

N

Вычисляет расстояние между точками P1 и P2

( DISTANCE ( LIST 10 y) a )

POLAR

P1 N1 N2

P

Возвращает координаты точки, отстоящей от P1 на расстояние N1 под углом N2

( POLAR ( LIST x y ) 10

PI )

SETQ

V1 AL1 [… VN ALN ]

ALN

Присваивает переменной V1 значение AL1, переменной V2 - значение AL2 и т.д. Возвращает последнее присвоенное значение

( SETQ a ( + b 4 ) )

SQRT

N1

N

Вычисляет квадратный корень числа N1.

( SQRT ( * a a ) ( * b b ))

ABS

N1

N

Возвращает модуль числа N1.

( ABS -5 )

FIX

N1

N

Возвращает целую часть числа N1.

( FIX 5.25 )

SIN

N1

N

Возвращает синус угла N1, заданного в радианах

( SIN 0 )

УПРАВЛЯЮЩИЕ КОНСТРУКЦИИ

DEFUN

S [AL1 … ALN] [/ V1 … VM]

AL

Создание пользовательской функции с именем S, аргументами AL1 … ALN (могут отсутствовать) и локальными переменными V1 … VM(также могут отсутствовать, тогда знак "/" не ставится)

( UN myfunc ( a / n )

( SETQ a ( + a 10 ) )

)

IF

E1 E2 [E3]

NIL

Вычисляется выражение E1. Если оно истинно (не NIL), то выполняется выражение E2, иначе - E3

( IF ( = a b )

( PRINT "\nA=B" )

( PRINT "\nA<>B" )

)

PROGN

E1 .. EN

EN

Объединяет несколько выражений в одно для использования в функции IF, если в ветвях "то" или "иначе" нужно выполнить более одной функции..

( IF ( = a 0 )

( PROGN

( SETQ a 1 )

( PROMPT "\nA=0" )

)

)

REPEAT

N E1 [... EN]

EN

Выражения E1 .. EN циклически выполняются N раз

( REPEAT 10 ( PRINT "\n" )

)

WHILE

E1 E2 [... EN]

EN

Выражения E2 .. EN (тело цикла) выполняются до тех пор, пока E1 не NIL.

( WHILE ( <= i 10 )

( SETQ i ( + i 1 ) )

)

ФУНКЦИИ СВЯЗИ С АВТОКАДОМ

COMMAND

S1 […SN]

NIL

Выполняет команду Автокада с именем S1 и параметрами S2..SN. Параметрами могут быть имена переменных и выражения Автолиспа

( COMMAND "ПЛИНИЯ" ( LIST 10 10 ) a "ЗАМКНИ" )

GETVAR

S

AL или S или B

Возвращает значение системной переменной Автокада с именем S.

( GETVAR "DIMTXT" )

SETVAR

S AL или S или B

AL или S или B

Устанавливает новое значение системной переменной Автокада с именем S.

( SETVAR "dimext" 3.5 )

ФУНКЦИИ ОБРАБОТКИ СПИСКОВ

CADR

L1

AL

Возвращает второй элемент списка L (например, координату Y точки)

( CADR ( LIST 10 20 ) )

CAR

L1

AL

Возвращает первый элемент списка L (например, координату X точки)

( CAR a )

LIST

AL1 AL2 [… ALN*]

L

Объединяет все свои аргументы в один список

( LIST x y )

NTH

N L

AL

Возвращает элемент списка L с порядковым номером N (первый элемент имеет номер ноль!)

( NTH 1 a )

ФУНКЦИИ ВВОДА-ВЫВОДА

GETINT

S

N

Ввод целого числа с клавиатуры. S - текст подсказки.

( SETQ n ( GETINT "\nВведите число точек: " ) )

GETPOINT

[P1] S

P

Ввод координат точки при помощи мышки. S - текст подсказки. Если задана точка P1, то от нее к текущей точке отображается "резиновая линия".

( SETQ p ( GETPOINT ( LIST 0 0 ) "\nУкажите начальную точку: " ) )

GETREAL

S

N

Ввод вещественного числа с клавиатуры. S - текст подсказки.

( SETQ x ( GETREAL "\nВведите координату Х: " ) )

GETSTRING

[N] S

S

Ввод текстовой строки с клавиатуры. S - текст подсказки. Если B указан и не равен нулю, то вводимая строка может содержать пробелы, иначе пробел рассматривается как признак конца ввода.

( SETQ s( GETSTRING "\nEnter your name: " ) )

GRAPHSCR

-

NIL

Включает графический экран Автокада.

( GRAPHSCR )

INITGET

N

NIL

Устанавливает защиту от неправильного ввода на одну следующую GET-функцию. N - сумма следующих значений: 1 - запрет пустого ввода; 2 - запрет ввода нуля;

4 - запрет ввода отрицательных чисел.

( INITGET 1 )

( SETQ a ( GETREAL "?" ) )

PRIN1

[A или E]

-

Если вызывается без параметров, не возвращает ничего. Особенно удобна для "тихого" завершения программы.

....

( PRIN1 )

) ; КОНЕЦ ПРОГРАММЫ

PRINT

A или E

A или E

Выводит на текстовый экран выражение A.

( PRIN1 ( + 2 2 ) )

PROMPT

S

NIL

Выводит на текстовый экран строку S.

( PROMPT "\nHello, world!")

TEXTSCR

-

NIL

Включает текстовый экран Автокада.

( TEXTSCR )

СТРОКОВЫЕ ФУНКЦИИ

STRCASE

S B

S

Переводит все буквы в строке S в верхний (при B=NIL) или в нижний (при B=T) регистр (только для английских букв).

( STRCASE s1 T )

SUBSTR

S N1 N2

S

Возвращает часть строки S, начинающуюся с N1-го символа и имеющую длину N2 символа.

( SUBSTR "M16x20" 4 2 )

STRCAT

S1 S2 [... SN ]

S

Объединяет несколько символьных срок в одну.

( STRCAT "\nA=" a )

СHR

N

S

Возвращает символ с ASCII-кодом N.

( CHR 7 )

STRLEN

S

L

Возвращает число символов в строке S.

( STRLEN "abc" )

ASCII

S

N

Возвращает ASCII-код первого символа в строке S.

( ASCII "Z" )

ФУНКЦИИ ПРЕОБРАЗОВАНИЯ ТИПОВ

ITOA

N

S

Преобразует целое число N в его текстовое представление S.

( PROMPT ( ITOA 5 ) )

ATOI

S

N

Преобразует текстовую строку S в целое число N.

( ATOI "4" )

RTOS

N1 N2 N3

S

Преобразует вещественное число N1 в текстовую сроку S. N2 - код формата числа (1 - научный; 2 - десятичный), N3 - точность (число знаков после запятой).

( RTOS 5.255467 1 3 )

ATOF

S

N

Преобразует текстовую строку S в действительное число N.

( ATOF "3.141459" )

ПРИЛОЖЕНИЕ 2

Формат основных команд Автокада 10

Форматы представлены в виде схем. Ключевые слова выделены жирным шрифтом. Места ввода значений (чисел, текста, координат точек) отмечены двоеточием. Цифры в кружках означают переход к соответствующей клетке схемы.

ПЛИНИЯ

От точки:

ДУга

Замкни

Полуширина

ДЛина

ОТМени

Ширина

Конечная точка сегмента:

Начальная полуширина:

Длина отрезка:

Начальная ширина:

Конечная полуширина:

Конечная ширина:

Центр

Замкни

Направление

Полуширина

ОТРезок

Радиус

Вторая

ОТМени

Ширина

Конечная точка дуги:

Центр

Радиус

Центр:

Направление от начальной точки:

Начальная полуширина:

Радиус:

Начальная ширина:

Центр:

Радиус:

Длина

Конечная полуширина:

Угол

Конечная ширина:

Направление хорды:

Длина хорды:

Центральный угол:

Направление хорды:

ЦВЕТ

Новый цвет:

Коды цветов: 1 - красный; 2 - желтый; 3 - зеленый; 4 - голубой; 5 - синий; 6 - фиолетовый; 7 - белый; с 8 по 15 - то же, но с пониженной яркостью.

ТИПЛИН

?

Создай

Загрузи

Установи

Файл списка типов линий:

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

Загрузить тип линии:

Новый тип линии:

Файл для хранения типа линии:

Искать в файле:

ЗЕРКАЛО

Выберите объекты:

Первая точка оси отражения:

Вторая точка:

Удалить старые объекты (Д/Н):

ПОКАЖИ

Все

Центр

Динамика

Границы

Левый

Предыдущий

Рамка

Масштаб:

Центральная точка:

Левая нижняя угловая точка:

Первый угол:

Увеличение или высота:

Другой угол:

СОТРИ

Выберите объекты:

РАЗМЕР1

Размер (ГОР/ВЕР):

Начало первой выносной линии:

Начало первой выносной линии:

Место положения размерной линии:

Размерный текст:

ПРИЛОЖЕНИЕ 3

Сообщения об ошибках

Здесь приведен список сообщений об ошибках, которые вы можете встретить в процессе написания и отладки функций Автолиспа. Они выводятся стандартным обработчиком ошибок Автолиспа в виде:

error: сообщение

AutoCAD rejected function

Аргументы, переданные в функцию Автокада, были неверны (например, попытка задать значение с помощью GETVAR несуществующей системной переменной или переменной, разрешенной только для чтения) или же в данном контексте сама функция неверна. К примеру, Вы не можете пользоваться функциями GETxxx из функции COMMAND.

bad argument type

В функцию был передан неверный тип аргумента. (Например, вы не можете выполнить функцию STRLEN над целочисленным аргументом.)

bad association list

Список, переданный в функцию ASSOC, не состоит из списков "(ключ значение)".

bad entmod list

Аргумент переданный в функцию ENTMOD, не свойственный для списка данных примитива (возвращаемого функцией ENTGET).

bad formal argument list

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

bad function

Первый элемент списка - недопустимое имя функции. Возможно это имя переменной или число.

bad list

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

bad node

Функция TYPE столкнулась с элементом неверного типа.

bad node type in list

Функция FOREACH столкнулась с элементом неверного типа.

bad point argument

В функцию, ожидающую точку, была передана неверно специфицированная точка. Будьте внимательны, не начинайте действительное число с десятичной точки; в подобных случаях необходимо число начинать с нуля.

bad point value

Та же ситуация, что описана выше.

boole arg1 < 0 or > 15

Первый аргумент в функции BOOLE должен быть целым числом между 0 и 15.

can't evaluate expression

Эта ошибка может произойти в случае неверного размещения десятичной точки или неверно сформированного выражения.

console break

В то время, как выполнялась функция, пользователь нажал + или +.

divide by zero

Недопустимое деление на ноль.

extra right paren

Встречено одна или более лишних правых скобок.

file not open

Описатель файла для операции ввода/вывода относится не к открытому файлу.

function canceled

На запрос о вводе данных пользователь нажал + или +.

function undefined for argument

Аргумент, переданный в функции LOG или SQRT, выходит за пределы допустимых значений.

function undefined for real

В функцию вместо целочисленного аргумента было передано действительное число. Например: (LSH val 1.2).

improper argument

Аргумент функции GCD отрицательное число или ноль.

incorrect number of arguments to a function

Число аргументов, переданное в определенную пользователем функцию, не соответствует числу формальных аргументов, указанное в функции DEFUN.

insufficient node space

Для выполнения требуемого действия недостаточно динамической памяти.

insufficient string space

Для размещения требуемой текстовой строки недостаточно динамической памяти.

invalid argument

Неверный тип аргумента или же аргумент выходит за пределы допустимых значений.

invalid character

Выражение содержит неверный символ.

invalid dotted pair

Дот-пара - список, состоящий из двух элементов, разделенных конструкцией "пробел-точка-пробел". Это сообщение об ошибке может быть получено, если вы вначале действительного числа поставили десятичную точку; в подобных случаях необходимо число начинать с нуля.

LISPSTACK overflow

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

misplaced dot

Такое сообщение может быть получено в случае, когда действительное число начинается с десятичной точки; в подобных случаях необходимо число начинать с нуля.

null function

Была предпринята попытка выполнить неизвестную функцию.

quit / exit abort

Это результат вызова функции QUIT или EXIT. Эти функции в настоящее время не используются в Автолиспе.

too few arguments

Во встроенную функцию было передано недостаточное число аргументов.

too many arguments

Во встроенную функцию было передано чрезмерное число аргументов.