- •( Setq a ( 0.25 "абв" 46 ) )
- •( Setq a '( 0.25 "абв" 46 ) )
- •( Load "имя_файла" )
- •( Command t1 t2 .. Tn )
- •Текущая ширина линии равна 0.00
- •( Cdr ( list 10 20 ) ) возвращает ( 20 )
- •( Setq a ( append a ( list 20 ) ) )
- •( Foreach name list exp )
- •( Mapcar 'f l1 l2 ... Ln )
- •__ Два объекта называются конструктивно подобными, если их соответствующие проекции представляются одними и теми же графами.
- •Библиографический список
- •1 Например. Доц. Троицкий д.И. - потенциальный источник ошибок на лекциях и неприятностей на экзаменах.
Библиографический список
-
Гладков С.А. Программирование на языке Автолисп в системе САПР Автокад. - М.: “ДИАЛОГ-МИФИ”,1991.- 96с
Наиболее полное изложение языка Автолисп, требующее определенной подготовки читателя в области программирования. Описывается работа с ГБД Автокада, управление памятью в Автолисп, приведен обширный справочник функций. В то же время книга содержит ряд ошибок и неточностей.
-
Г.А. Бугрименко. Автолисп - язык графического программирования в системе AutoCAD. - М.: Машиностроение, 1992. - 144 с.; ил.
Краткое изложение принципов программирования вообще и основ работы с Автолиспом. Дается множество полезных примеров. Однако изложение возможностей языка весьма неполно.
-
Хювенен Э., Сеппанен Й. Мир Лиспа. В 2-х тт. М.: Мир, 1985.
Изложение принципов функционального программирования на примере языка CommonLISP. Глубоко прорабатываются теоретические вопросы. Приведено множество примеров, в том числе и из области задач искусственного интеллекта. К сожалению, большинство примеров использует функции CommonLISP, не реализованные в Автолиспе и для их выполнения нужен другой интерпретатор.
-
А. Филд, П. Харрисон. Функциональное программирование. Пер. С англ. - М.: Мир, 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 ) ) ; КОНЕЦ ПРОГРАММЫ |
|
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
Во встроенную функцию было передано чрезмерное число аргументов.